Calculation differences between Debug and Release mode

Alexandr Druzhinin drug2004 at bk.ru
Sat Apr 13 00:07:37 PDT 2013


I'm not sure, but I suspect this is because of 80-bit intermediary float 
point operation result. Its precision too excessive and gives us this 
inexpectible result. But when you use an intermediary variable this 
exessive intermediary result is rounded properly and you get what you 
expect. See here - http://d.puremagic.com/issues/show_bug.cgi?id=6531. 
The reason is:
float a, b, c, d, foo;
foo = a + b / c;
if (d < foo) { // you compare two float value
} else {
}
but:
if (d < (a + b / c)) { // you compare float value and 80bit value and 
sometimes the result won't be what you expected
} else {
}

in your case in release mode compiler may do some optimization and do 
not round value properly but using temp you force do proper rounding


More information about the Digitalmars-d-learn mailing list