[Issue 3751] Optimalization error in some floating point code
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Fri Jan 29 04:28:24 PST 2010
http://d.puremagic.com/issues/show_bug.cgi?id=3751
--- Comment #3 from Witold Baryluk <baryluk at smp.if.uj.edu.pl> 2010-01-29 04:28:20 PST ---
(In reply to comment #2)
> is this maybe related to issue 3736 ?
I don't know. This is quite different issues (i'm not using structs, and i
doesn't call functions when error occure).
My bug have probably something with FPU register allocation, but this is just a
guess.
I further reduced test case, change "write("%s",half)" to nic(), where nic is
empty function, and write code directly in main
import std.math;
import std.stdio;
void nic() {}
void main() {
foreach (i; 1 .. 10) {
auto z = 0.1 + 0.001*i;
double left = -7.0, right = 7.0, half;
while (true) {
half = (left+right)*0.5; // or left+0.5*(right-left);
version(something) {
nic(); // adding this solves problem
}
if (left == half) {
break; // or break
}
if (half == right) {
break; // or break
}
/+
// the same effect
if ((left == half) || (half == right)) {
return half; // or break
}
+/
double fhalf = 1.0/(half*half) * (half + 0.7) - z;
if (fhalf > 0.0) {
right = half;
} else if (fhalf <= 0.0) {
left = half;
}
};
writefln("%g %g", z, half);
}
}
One of the dide by side diff (left -O, right -O + nic):
http://pastebin.com/f17a77299
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list