Newsgroup: it.comp.lang.c
Titolo: Divisioni di numeri long in c

Xpost anche su idl, dato che ho tanti amici programmtori li.
Ho bisogno di unaituo
Su un palmare con a bordo msdos faccio la seguente operazione in c
lQtaPrev1 = lQtaPrev1 * (qtaBar2 / lQtaQCA);
tutti gli elementi sono definiti come long
qtaBar2 č un parametro della funzione in cui č contenuta l'operazione
parametro anch'esso definito come long sia nella funzione sia nel chiamante.
avendo lQtaPrev1 = 144, qtaBar2 = 63 e lQtaQCA = 84 il risultato
dell'operazione č sempre 0 invece di 252.
Dove posso aver errato, non essendo un grandissimo espoerto di C
Ciao
/

 Dove posso aver errato, non essendo un grandissimo espoerto di C
144 * (63/84) -> 144 * (0) -> 0
Le parentesi tonde danno la precedenza alla divisione.
La divisione (63/84) tra interi da come risultato 0 che moltipicato per
qualsiasi numero da sempre 0, come vedi è tutto esatto.
Non capisco poi da dove prendi questo 252.. tra float/double il risultato
giusto sarebbe 108, volendo restare sugli interi per ottenere lo stesso
risultato togli le parentesi.
---
Outgoing mail is certified Virus Free.
Checked by AVG anti-virus system (
http://www.grisoft.com
).
Version: 6.0.622 / Virus Database: 400 - Release Date: 13/03/2004

 risultato togli le parentesi.
Scusami, il 252 era il risultato applicato e un altra operazione identica su
un valore diverso.
Ora provo a togliere le parentesi, o esiste la possibilità di convertire il
float al volo in c.
Ciao
/

 dell'operazione è sempre 0 invece di 252.
Il long e' un tipo di dato 'intero', quindi 63/84=0 e basta.
Se sai che i tuoi numeri sono piccoli (giusto per non "sforare" il long) 
puoi fare:
lQtaPrev1 = (lQtaPrev1 * qtaBar2) / lQtaQCA;
altrimenti devi passare per un 'cast':
lQtaPrev1 = (long) lQtaPrev1 * ((double) qtaBar2 / lQtaQCA);
Comunque con i valori indicati dovrebbe dare 108.
Ciao

 ha scritto nel messaggio
news:c3c388$ni$1...@newsreader.mailgate.org...

grazie mille per le preziose info, avevo completamente dimenticato i cast,
funziona anche eliminado le parentesi.
Per il risultato errato ho mischiato i valori di due prove infatti alla fine
era 76 poichè i valori erano 144,16 e 36
/

 float al volo in c.
1) non fare divisioni con i long, e' un bug che prima o poi ti si
presentera'.
2) per convertire "al volo" usa il casting. Vedi alla relativa voce di K&R.
spider


_________________________________________________________________________
Signore e signori, la mamma di whiplash di IDL, applica le nuove tariffe, 
approfittatene !
3 pompini al prezzo di 2, una minetta di due ore per le signore a soli 15 euro. 
Lezioni di kamasutra per i piu' giovani, Prima Lezione per i neopatentati: 
Come evitare il freno a mano.
Varie tipologie di bocchini, tra cui il famoso Rigatone, di cui detiene 
anche il copyright.
A richiesta, esperienze hard e sadomaso per i piu' esigenti. 
Chinotti, ditalini, lisciacappelle, degustazione di vari tipi di sperma, 
succhiotti, boccaccie, 69, 90°, 180°,orale, anale, protetto e non protetto,
dalla mamma di whiplash tutto questo e di piu' ! 
E tutto a domicilio !
Ricordate signori : la mamma di whiplash di IDL, 
per noi, per voi, per sempre.
_______________________________________________________________