[Tech] Domanda di C

Franco Bagnoli bagnoli@dma.unifi.it
Mer 26 Maggio 2004 21:47:52 CEST


On Wed, 26 May 2004, Valerio Montagnani wrote:

> Esempio da manuale? Hai trovato questo su un manuale di riferimento?
> Potresti darmi il titolo? Grazie.

The C Programming Language
Brian Kernighan and Dennis Ritchie, 
Prentice-Hal 1988 ;)

le union sono state fatte apposta per poter accedere ai dati in diverse 
maniere, direi essenzialmente per copiti tipo il tuo (non le ho 
praticamente mai usate, comunque). 

> Sono vettori di 1920000 campioni di tipo signed char.

Ammesso che abbia capito cosa devi fare, devi valutare se ti puoi 
permettere di convertirli a double, farci sopra una qualche operazione e 
poi riconvertirli a int, o se devi sviluppare un algoritmno direttamente 
per gli int. 

se puoi convertirli a double, io normalizzerei a 1, ovvero (senza usare 
union)

unsigned short x, y;
double r;
double ampl=1.5;

x= read(...)
y= x>>8 | x << 8; /* dovrebbe funzionare */
r = (double) y /((unsigned short) -1));
r *= ampl;
r = 1/(1+exp(-2*r));  /* è un arco tangente iperbolica, anche se non 
                      sembra */
y = (unsigned short) (r*((unsigned short) -1)));
x = y >> 8 | y << 8;
write(x);


-- 
Franco Bagnoli (franchino) <bagnoli@dma.unifi.it> 
virtual location: Dipartimento di Energetica "S. Stecco"
ultra-virtual affiliation: Centro Dinamiche Complesse (CSDC-Firenze)
real location: Dip. Matematica Applicata "G. Sansone", Universita' Firenze,
Via S. Marta, 3 I-50139 Firenze, Italy. Tel. +39 0554796422, fax: +39 055471787





Maggiori informazioni sulla lista flug-tech