|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
[C++] ma sono cosi' niubbo !!
AIUTO!!!
Mi sembra di essere tornato alle elementari. ![]() Perche' questo fallisce?? Codice:
double meanValue = 1.0/9;
double total = 0;
for(int index = 0; index < 9; index++)
{
total += meanValue;
}
if( total != 1)
{
printf("Error");
}
Qualche anima pia che mi fa capire come ho appena fatto a perdere 2 ore stanotte su un confronto ???? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Feb 2004
Città: TREVISO
Messaggi: 902
|
ti faccio una domanda che forse ti stupirà: ma hai provato invece di stampare la scritta "error", a stampare il valore della variabile su cui si effettua il confronto?
...a quanto pare, anche se dai calcoli questa dovrebbe valere 1, in realtà essa contiene un valore diverso da 1.
__________________
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: May 2006
Città: Wursteland
Messaggi: 1749
|
se stampi strada facendo il valore di total:
Quote:
se ti interessa la parte intera fai: Codice:
if( (int)total != 1 )
__________________
Nintendo WIII 4d Turbo Intercooler - Sestium X 666 99,312 GHz - 6.984 Ram Σ(9999) MHz - HDD SATA 97e^(10) bytes 93³ rpm - ATI biberon X900z ∞Mb - Win Eight SP (1 > yours) 16 Valve |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Il risultato di tutto questo è che operazioni come quelle che hai fatto tu, non porteranno mai ad un risultato esatto e preciso, nel tuo caso 1.0. Quando si lavora con i numeri floating point, bisogna fare molta attenzione ai test di (dis)eguaglianza.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#5 | ||
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Il problema e' che a casa ia 1.00000 e' uguale a 1 (In ogni caso hai fatto bene a chiedere :P) Quote:
Ma poi, dovendo troncare il numero 0.9999999999999999, non diventa proprio un 1 EDIT: ma con Java e c# sti problemi mica ci sono....eppure la rappresentazione numerica sempre quella e' nei PC Ultima modifica di Bonfo : 28-11-2006 alle 15:46. |
||
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
Prova questo codice C/C++: Codice:
double a = 2.54;
double b = 2.5;
double c = 0.04;
double d;
d = a - b;
if (d == c)
printf ("Uguale\n");
else
printf ("Diverso\n");
Codice:
double a = 2.54;
double b = 2.5;
double c = 0.04;
double d;
d = a - b;
if (d == c)
System.out.println ("Uguale");
else
System.out.println ("Diverso");
È un problema dovuto alla rappresentazione dei numeri floating-point.
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
... mmmh... mi fido
Pero' ti posso assicurare che in Java non ci ho mai sbattuto contro, anche se i problemi di rappresentazione numerica li conosco e li ho incontarti, soprattutto con gl i interi Grazie. |
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Avevo dei loop un po' troppo grandi e mi capitava che un numero da positivo diventasse improvvismente negativo
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: TO
Messaggi: 5206
|
Quote:
__________________
Andrea, SCJP 5 (91%) - SCWCD 5 (94%) |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Bologna
Messaggi: 1303
|
Quote:
Per quello l'ho considerato un problema di rappresentazione. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 15:20.




















