So che non possiamo confrontare 2 valori in virgola mobile usando ==. Possiamo solo confrontare che si trovano entro un intervallo l'uno dall'altro. SoÈ possibile confrontare esattamente i valori in virgola mobile a zero?
if(val == 0.512)
è sbagliato a causa di errori insiti in calcoli in virgola mobile e la conversione in binario e dovrebbe essere
if (val in (0.512-epsilon, 0.512+epsilon))
Ma è 0 speciale? Possiamo confrontare i float esattamente a 0? O anche quello non è corretto? In particolare nel contesto di C# e Java?
double val = 0;
val = getVal();
if(val == 0)
pedanteria matematica: è epsilon, non ephsilon. bella domanda, però. – Carl
Ovviamente è possibile confrontare due valori in virgola mobile usando l'uguaglianza esatta. Per determinati scopi limitati, non è ciò che si vuole fare, ma dire che "non si può" farlo è una sciocchezza, pura e semplice, e impedisce agli sviluppatori di apprendere la semantica reale di virgola mobile. –
@Carl: Grazie per la pedanteria greca! ha modificato il post Sono così abituato a scrivere (U + 0395) ε, non sapevo esattamente l'ortografia! – Fakrudeen