Hello, everyone!
I'm a new D fan, still learning the language and this is my
first post.
I came up with a strange behavior, using D 2.089 for windows.
Considering the program "error.d":
import std.stdio;
import std.conv;
void main() {
uint c(double v) {
return (37.05*100.0).to!uint;
}
double f;
uint c2(double v) {
return (37.05*f).to!uint;
}
f=100.0;
writeln("All should be 3705, right? -- ", 37.05*100, ";
", 37.05*100.0, "; ", (37.05*100).to!uint, "; ",c(37.05),";
",c2(37.05));
}
I expect all values to be 3705, yet running it with
'/c/D/dmd-2.089.0/windows/bin/dmd.exe -run error.d' gives me the
output:
All should be 3705, right? -- 3705; 3705; 3705; 3705; 3704
I also played with several compilation options, all yelding the
same results:
dmd -boundscheck=on -m64 -lowmem -of="error" "error".d && ./error
dmd -boundscheck=off -m64 -lowmem -of="error" "error".d && ./error
dmd -boundscheck=on -m32 -lowmem -of="error" "error".d && ./error
dmd -release -O -mcpu=native -boundscheck=on -m64 -lowmem
-of="error" "error".d && ./error
dmd -release -O -mcpu=native -boundscheck=on -m64 -of="error"
"error".d && ./error
dmd -of="error" "error".d && ./error
What am I doing wrong?