digitalmars.D.learn - floating-WTF
- Caligo (30/30) Jan 23 2012 alias double Real;
- sclytrack (14/44) Jan 24 2012 This: (with float)
- sclytrack (11/62) Jan 24 2012 t=0.750000, a=-2.000000, b=2.000000, s1=-0.500000, s2=0.000000,
- sclytrack (27/30) Jan 24 2012 ---------------------------------------
- Dejan Lekic (11/11) Jan 24 2012 No, it is not a bug.
- sclytrack (2/13) Jan 24 2012 I don't understand.
- sclytrack (20/38) Jan 24 2012 I see now I forgot the input values. Sorry my IQ is 87.
- Caligo (3/14) Jan 24 2012 wow, what a great hint.
- sclytrack (43/43) Jan 24 2012 void calculate2(float a, float b)
- dennis luehring (6/49) Jan 24 2012 can you give us a complete out-of-the-box compileable example (with
- dennis luehring (2/2) Jan 24 2012 double works correct under dmd64, but float not?
- sclytrack (110/165) Jan 24 2012 Yes, I missed my lessons in clear communication.
- dennis luehring (12/182) Jan 24 2012 Am 24.01.2012 18:49, schrieb sclytrack:
- Caligo (3/3) Jan 24 2012 How did you compile it? As in my original post, it matters how you
- dennis luehring (4/7) Jan 24 2012 im on win7 (64bit) - but the windows dmd2.057 isn't able to produce x64
- %u (1/1) Jan 24 2012 Shouldn't this go into 'digitalmars.D' ?
- Timon Gehr (2/3) Jan 24 2012 It should go straight to the bug tracker.
- sclytrack (2/5) Jan 28 2012 Issue 7391 - floating wtf dmd 2.057 64
- Timon Gehr (2/8) Jan 28 2012 Thanks!
- Caligo (3/12) Jan 28 2012 I've already reported, and it's been fixed in the latest:
- sclytrack (3/17) Jan 28 2012 Now I've waisted Walter's precious time.
- Caligo (3/5) Jan 28 2012 I should have made a post about the fact that I had already bug
- sclytrack (9/10) Jan 28 2012 Prior to filing the bug I tried to compile dmd from source.
- Jonathan M Davis (3/15) Jan 29 2012 Don't forget druntime. You need it as well if you want to build Phobos.
alias double Real; //alias float Real; // simple linear interpolation; I partitioned the internals to help me figure out what was happening. Real lerp(Real t, Real a, Real b){ Real s1 = (1.0 - t) * a; Real s2 = t * b; Real rt1 = s1 + s2; Real rt2 = ((1.0 - t) * a) + (t * b); writefln("t=%.2f, a=%.2f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); return rt2; } unittest{ writeln(lerp(0.75, -2.0, 2.0)); // the correct result is 1.0 } compile and run with 'dmd -inline -unittest' and the output should be: t=0.75, a=-2.00, b=2.00, s1=-0.50, s2=1.50, rt1=1.00, rt2=1.00 ::: 1 Now, change 'Real' to float by uncommenting the second line and compile and run with 'dmd -unittest'. This is what I get for the output: t=0.75, a=0.00, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: 1.5 I have no idea why 'a' is zero. 'rt1' and 'rt2' do not have the same value, and 'lerp' does not return 1.0. Compiling with 'dmd -inline -unittest' does produce the correct result as before, though. You can play with different compiler options, such as -O, to get the same weird behavior. I presume this is another DMD bug?
Jan 23 2012
On 01/24/2012 04:13 AM, Caligo wrote:alias double Real; //alias float Real; // simple linear interpolation; I partitioned the internals to help me figure out what was happening. Real lerp(Real t, Real a, Real b){ Real s1 = (1.0 - t) * a; Real s2 = t * b; Real rt1 = s1 + s2; Real rt2 = ((1.0 - t) * a) + (t * b); writefln("t=%.2f, a=%.2f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); return rt2; } unittest{ writeln(lerp(0.75, -2.0, 2.0)); // the correct result is 1.0 } compile and run with 'dmd -inline -unittest' and the output should be: t=0.75, a=-2.00, b=2.00, s1=-0.50, s2=1.50, rt1=1.00, rt2=1.00 ::: 1 Now, change 'Real' to float by uncommenting the second line and compile and run with 'dmd -unittest'. This is what I get for the output: t=0.75, a=0.00, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: 1.5This: (with float) writefln("t=%.2f, a=%.2f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); writefln("t=%.2f, a=%f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); Outputs: (with float) t=0.75, a=0.00, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: t=0.75, a=-2.000000, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: difference: %.2f ---> %fI have no idea why 'a' is zero. 'rt1' and 'rt2' do not have the same value, and 'lerp' does not return 1.0. Compiling with 'dmd -inline -unittest' does produce the correct result as before, though. You can play with different compiler options, such as -O, to get the same weird behavior. I presume this is another DMD bug?
Jan 24 2012
t=0.750000, a=-2.000000, b=2.000000, s1=-0.500000, s2=0.000000, rt1=-0.500000, rt2=1.500000 ::: 1.5 t = 0.75 ok a = -2.0 ok b = 2.0 ok s1 = -0.5 ok s2 = 1.5 //<----different above says s2 = 0.0 rt1= 1.0 = s1 + s2 semi-ok depends on s2. rt2 = 1.0 = ((1.0 - t) * a) + (t * b); goes nuts. On 01/24/2012 10:03 AM, sclytrack wrote:On 01/24/2012 04:13 AM, Caligo wrote:alias double Real; //alias float Real; // simple linear interpolation; I partitioned the internals to help me figure out what was happening. Real lerp(Real t, Real a, Real b){ Real s1 = (1.0 - t) * a; Real s2 = t * b; Real rt1 = s1 + s2; Real rt2 = ((1.0 - t) * a) + (t * b); writefln("t=%.2f, a=%.2f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); return rt2; } unittest{ writeln(lerp(0.75, -2.0, 2.0)); // the correct result is 1.0 } compile and run with 'dmd -inline -unittest' and the output should be: t=0.75, a=-2.00, b=2.00, s1=-0.50, s2=1.50, rt1=1.00, rt2=1.00 ::: 1 Now, change 'Real' to float by uncommenting the second line and compile and run with 'dmd -unittest'. This is what I get for the output: t=0.75, a=0.00, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: 1.5This: (with float) writefln("t=%.2f, a=%.2f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); writefln("t=%.2f, a=%f, b=%.2f, s1=%.2f, s2=%.2f, rt1=%.2f, rt2=%.2f :::", t, a, b, s1, s2, rt1, rt2); Outputs: (with float) t=0.75, a=0.00, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: t=0.75, a=-2.000000, b=2.00, s1=-0.50, s2=0.00, rt1=-0.50, rt2=1.50 ::: difference: %.2f ---> %fI have no idea why 'a' is zero. 'rt1' and 'rt2' do not have the same value, and 'lerp' does not return 1.0. Compiling with 'dmd -inline -unittest' does produce the correct result as before, though. You can play with different compiler options, such as -O, to get the same weird behavior. I presume this is another DMD bug?
Jan 24 2012
--------------------------------------- alias float Real; Real lerp(Real t, Real a, Real b) { Real s2 = t * b; writeln("t*b= ", s2); writeln("t*b= ", t * b); return s2; } Output: t*b= 1.5 t*b= 1.5 ------------------------------------- alias float Real; Real lerp(Real t, Real a, Real b) { Real s1 = (1.0 - t) * a; Real s2 = t * b; writeln("t*b= ", s2); writeln("t*b= ", t * b); return s2; } Output: t*b= 0 t*b= 1.5 -------------------------------------yes.I presume this is another DMD bug?
Jan 24 2012
No, it is not a bug. Here is a hint: import std.stdio; int main() { float f; writeln(f); return 0; } /+--- output ----------+ nan +--- end of output ---+/
Jan 24 2012
On 01/24/2012 01:51 PM, Dejan Lekic wrote:No, it is not a bug. Here is a hint: import std.stdio; int main() { float f; writeln(f); return 0; } /+--- output ----------+ nan +--- end of output ---+/I don't understand.
Jan 24 2012
On 01/24/2012 04:41 PM, sclytrack wrote:On 01/24/2012 01:51 PM, Dejan Lekic wrote:I see now I forgot the input values. Sorry my IQ is 87. void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } -------INPUT values int main() { calculate2(0.75f,2.0f); return 0; } ---------------- Output: t*b= 0 t*b= 1.5 ----------------No, it is not a bug. Here is a hint: import std.stdio; int main() { float f; writeln(f); return 0; } /+--- output ----------+ nan +--- end of output ---+/I don't understand.
Jan 24 2012
On Tue, Jan 24, 2012 at 6:51 AM, Dejan Lekic <dejan.lekic gmail.com> wrote:No, it is not a bug. Here is a hint: import std.stdio; int main() { =A0float f; =A0writeln(f); =A0return 0; } /+--- output ----------+ nan +--- end of output ---+/wow, what a great hint. sorry, but I'm not convinced that it's not a bug.
Jan 24 2012
void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } ---------------- Output: t*b= 0 t*b= 1.5 ---------------- assume CS:.text._D4main10calculate2FffZv _D4main10calculate2FffZv: push RBP mov RBP,RSP sub RSP,020h movss -010h[RBP],XMM0 movss -8[RBP],XMM1 mov RAX,03FF0000000000000h mov -020h[RBP],RAX movsd XMM2,-020h[RBP] cvtss2sd XMM1,XMM1 subsd XMM2,XMM1 ------conversion but xmm2 is no longer used cvtsd2ss XMM2,XMM2 ------precision error multiplication mulss XMM1,XMM0 movss -018h[RBP],XMM1 movss XMM0,-018h[RBP] call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 movss XMM0,-8[RBP] movss XMM1,-010h[RBP] mulss XMM0,XMM1 call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 leave ret nop nop nop ------------ DMD64 D Compiler v2.057 Ubuntu 11.10
Jan 24 2012
can you give us a complete out-of-the-box compileable example (with imports,main,etc.) with both examples the working/and nonworking does it work correct with dmd(32bit)? is this "calculate2" needed to reproduce the behavior? and what compiler did you test: dmd64, (dmd32?), ...? Am 24.01.2012 16:20, schrieb sclytrack:void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } ---------------- Output: t*b= 0 t*b= 1.5 ---------------- assume CS:.text._D4main10calculate2FffZv _D4main10calculate2FffZv: push RBP mov RBP,RSP sub RSP,020h movss -010h[RBP],XMM0 movss -8[RBP],XMM1 mov RAX,03FF0000000000000h mov -020h[RBP],RAX movsd XMM2,-020h[RBP] cvtss2sd XMM1,XMM1 subsd XMM2,XMM1 ------conversion but xmm2 is no longer used cvtsd2ss XMM2,XMM2 ------precision error multiplication mulss XMM1,XMM0 movss -018h[RBP],XMM1 movss XMM0,-018h[RBP] call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 movss XMM0,-8[RBP] movss XMM1,-010h[RBP] mulss XMM0,XMM1 call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 leave ret nop nop nop ------------ DMD64 D Compiler v2.057 Ubuntu 11.10
Jan 24 2012
double works correct under dmd64, but float not? what is the behavior of dmd32 in this szenario?
Jan 24 2012
Yes, I missed my lessons in clear communication. ------------------------------------------------- + The complete source files. ------------------------------------------------- import std.stdio; void calculate1(float a, float b) { float s1 = 1.0f - a; float s2 = a * b; writeln(s2); writeln(a * b); } void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } void calculate3(double a, double b) { double s1 = 1.0 - a; double s2 = a * b; writeln(s2); writeln(a * b); } int main() { writeln("calculate1:"); calculate1(0.75f,2.0f); writeln("calculate2:"); calculate2(0.75f,2.0f); writeln("calculate3:"); calculate3(0.75f,2.0f); return 0; } ------------------------------------------------- + The complete output ------------------------------------------------- calculate1: 1.5 1.5 calculate2: 0 1.5 calculate3: 1.5 1.5 ------------------------------------------------- + Compiler ------------------------------------------------- DMD64 D Compiler v2.057 Copyright (c) 1999-2011 by Digital Mars written by Walter Bright Documentation: http://www.digitalmars.com/d/2.0/index.html Usage: This is from the downloaded zip file. I'm using eclipse to compile it. Added the -debug. ------------------------------------------------- + Ubuntu 11.10 64 bit ------------------------------------------------- uname -r 3.0.0-15-generic ------------------------------------------------- + BEHAVIOUR ------------------------------------------------- As for the behaviour on 32 bit. I wish somebody else would do it. :-) In the previous message here below is the assembly output of calculate2. Pay close attention to the cvtss2sd, the cvtsd2ss and the mulss. float s1 = 1.0 - a; float s2 = a * b; It converts the float a to double precision. then performs the s1 calculation. Then does the s2 calculation with the high precision a and the normal float b. Also it performs the "cvtsd2ss %xmm2,%xmm2" for no reason at all. As it is no longer used in the rest the code. ------------------------------------------------- + objdump -S test1.o ------------------------------------------------- 0000000000000000 <_D4main10calculate2FffZv>: 0: 55 push %rbp 1: 48 8b ec mov %rsp,%rbp 4: 48 83 ec 20 sub $0x20,%rsp 8: f3 0f 11 45 f0 movss %xmm0,-0x10(%rbp) d: f3 0f 11 4d f8 movss %xmm1,-0x8(%rbp) 12: 48 b8 00 00 00 00 00 movabs $0x3ff0000000000000,%rax 19: 00 f0 3f 1c: 48 89 45 e0 mov %rax,-0x20(%rbp) 20: f2 0f 10 55 e0 movsd -0x20(%rbp),%xmm2 25: f3 0f 5a c9 cvtss2sd %xmm1,%xmm1 29: f2 0f 5c d1 subsd %xmm1,%xmm2 2d: f2 0f 5a d2 cvtsd2ss %xmm2,%xmm2 31: f3 0f 59 c8 mulss %xmm0,%xmm1 35: f3 0f 11 4d e8 movss %xmm1,-0x18(%rbp) 3a: f3 0f 10 45 e8 movss -0x18(%rbp),%xmm0 3f: e8 00 00 00 00 callq 44 <_D4main10calculate2FffZv+0x44> 44: f3 0f 10 45 f8 movss -0x8(%rbp),%xmm0 49: f3 0f 10 4d f0 movss -0x10(%rbp),%xmm1 4e: f3 0f 59 c1 mulss %xmm1,%xmm0 52: e8 00 00 00 00 callq 57 <_D4main10calculate2FffZv+0x57> 57: c9 leaveq 58: c3 retq 59: 90 nop 5a: 90 nop 5b: 90 nop I'm going to eat now. On 01/24/2012 05:01 PM, dennis luehring wrote:can you give us a complete out-of-the-box compileable example (with imports,main,etc.) with both examples the working/and nonworking does it work correct with dmd(32bit)? is this "calculate2" needed to reproduce the behavior? and what compiler did you test: dmd64, (dmd32?), ...? Am 24.01.2012 16:20, schrieb sclytrack:void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } ---------------- Output: t*b= 0 t*b= 1.5 ---------------- assume CS:.text._D4main10calculate2FffZv _D4main10calculate2FffZv: push RBP mov RBP,RSP sub RSP,020h movss -010h[RBP],XMM0 movss -8[RBP],XMM1 mov RAX,03FF0000000000000h mov -020h[RBP],RAX movsd XMM2,-020h[RBP] cvtss2sd XMM1,XMM1 subsd XMM2,XMM1 ------conversion but xmm2 is no longer used cvtsd2ss XMM2,XMM2 ------precision error multiplication mulss XMM1,XMM0 movss -018h[RBP],XMM1 movss XMM0,-018h[RBP] call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 movss XMM0,-8[RBP] movss XMM1,-010h[RBP] mulss XMM0,XMM1 call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 leave ret nop nop nop ------------ DMD64 D Compiler v2.057 Ubuntu 11.10
Jan 24 2012
Am 24.01.2012 18:49, schrieb sclytrack: dmd 2.057 give this result under windows/32bit calculate1: 1.5 1.5 calculate2: 1.5 1.5 calculate3: 1.5 1.5 so its seems to be an x64 compiler bugYes, I missed my lessons in clear communication. ------------------------------------------------- + The complete source files. ------------------------------------------------- import std.stdio; void calculate1(float a, float b) { float s1 = 1.0f - a; float s2 = a * b; writeln(s2); writeln(a * b); } void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } void calculate3(double a, double b) { double s1 = 1.0 - a; double s2 = a * b; writeln(s2); writeln(a * b); } int main() { writeln("calculate1:"); calculate1(0.75f,2.0f); writeln("calculate2:"); calculate2(0.75f,2.0f); writeln("calculate3:"); calculate3(0.75f,2.0f); return 0; } ------------------------------------------------- + The complete output ------------------------------------------------- calculate1: 1.5 1.5 calculate2: 0 1.5 calculate3: 1.5 1.5 ------------------------------------------------- + Compiler ------------------------------------------------- DMD64 D Compiler v2.057 Copyright (c) 1999-2011 by Digital Mars written by Walter Bright Documentation: http://www.digitalmars.com/d/2.0/index.html Usage: This is from the downloaded zip file. I'm using eclipse to compile it. Added the -debug. ------------------------------------------------- + Ubuntu 11.10 64 bit ------------------------------------------------- uname -r 3.0.0-15-generic ------------------------------------------------- + BEHAVIOUR ------------------------------------------------- As for the behaviour on 32 bit. I wish somebody else would do it. :-) In the previous message here below is the assembly output of calculate2. Pay close attention to the cvtss2sd, the cvtsd2ss and the mulss. float s1 = 1.0 - a; float s2 = a * b; It converts the float a to double precision. then performs the s1 calculation. Then does the s2 calculation with the high precision a and the normal float b. Also it performs the "cvtsd2ss %xmm2,%xmm2" for no reason at all. As it is no longer used in the rest the code. ------------------------------------------------- + objdump -S test1.o ------------------------------------------------- 0000000000000000<_D4main10calculate2FffZv>: 0: 55 push %rbp 1: 48 8b ec mov %rsp,%rbp 4: 48 83 ec 20 sub $0x20,%rsp 8: f3 0f 11 45 f0 movss %xmm0,-0x10(%rbp) d: f3 0f 11 4d f8 movss %xmm1,-0x8(%rbp) 12: 48 b8 00 00 00 00 00 movabs $0x3ff0000000000000,%rax 19: 00 f0 3f 1c: 48 89 45 e0 mov %rax,-0x20(%rbp) 20: f2 0f 10 55 e0 movsd -0x20(%rbp),%xmm2 25: f3 0f 5a c9 cvtss2sd %xmm1,%xmm1 29: f2 0f 5c d1 subsd %xmm1,%xmm2 2d: f2 0f 5a d2 cvtsd2ss %xmm2,%xmm2 31: f3 0f 59 c8 mulss %xmm0,%xmm1 35: f3 0f 11 4d e8 movss %xmm1,-0x18(%rbp) 3a: f3 0f 10 45 e8 movss -0x18(%rbp),%xmm0 3f: e8 00 00 00 00 callq 44<_D4main10calculate2FffZv+0x44> 44: f3 0f 10 45 f8 movss -0x8(%rbp),%xmm0 49: f3 0f 10 4d f0 movss -0x10(%rbp),%xmm1 4e: f3 0f 59 c1 mulss %xmm1,%xmm0 52: e8 00 00 00 00 callq 57<_D4main10calculate2FffZv+0x57> 57: c9 leaveq 58: c3 retq 59: 90 nop 5a: 90 nop 5b: 90 nop I'm going to eat now. On 01/24/2012 05:01 PM, dennis luehring wrote:can you give us a complete out-of-the-box compileable example (with imports,main,etc.) with both examples the working/and nonworking does it work correct with dmd(32bit)? is this "calculate2" needed to reproduce the behavior? and what compiler did you test: dmd64, (dmd32?), ...? Am 24.01.2012 16:20, schrieb sclytrack:void calculate2(float a, float b) { float s1 = 1.0 - a; float s2 = a * b; writeln(s2); writeln(a * b); } ---------------- Output: t*b= 0 t*b= 1.5 ---------------- assume CS:.text._D4main10calculate2FffZv _D4main10calculate2FffZv: push RBP mov RBP,RSP sub RSP,020h movss -010h[RBP],XMM0 movss -8[RBP],XMM1 mov RAX,03FF0000000000000h mov -020h[RBP],RAX movsd XMM2,-020h[RBP] cvtss2sd XMM1,XMM1 subsd XMM2,XMM1 ------conversion but xmm2 is no longer used cvtsd2ss XMM2,XMM2 ------precision error multiplication mulss XMM1,XMM0 movss -018h[RBP],XMM1 movss XMM0,-018h[RBP] call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 movss XMM0,-8[RBP] movss XMM1,-010h[RBP] mulss XMM0,XMM1 call _D3std5stdio14__T7writelnTfZ7writelnFfZv PC32 leave ret nop nop nop ------------ DMD64 D Compiler v2.057 Ubuntu 11.10
Jan 24 2012
How did you compile it? As in my original post, it matters how you compile it. In this case (I'm on a 64-bit GNU/Linux system), compiling with '-inline' doesn't trigger the bug.
Jan 24 2012
Am 24.01.2012 19:13, schrieb Caligo:How did you compile it? As in my original post, it matters how you compile it. In this case (I'm on a 64-bit GNU/Linux system), compiling with '-inline' doesn't trigger the bug.im on win7 (64bit) - but the windows dmd2.057 isn't able to produce x64 code (is that correct?) it works with "dmd -inline floattest.d" and "dmd -debug floattest.d"
Jan 24 2012
On 01/24/2012 10:28 PM, %u wrote:Shouldn't this go into 'digitalmars.D' ?It should go straight to the bug tracker.
Jan 24 2012
On 01/25/2012 01:12 AM, Timon Gehr wrote:On 01/24/2012 10:28 PM, %u wrote:Issue 7391 - floating wtf dmd 2.057 64Shouldn't this go into 'digitalmars.D' ?It should go straight to the bug tracker.
Jan 28 2012
On 01/28/2012 04:56 PM, sclytrack wrote:On 01/25/2012 01:12 AM, Timon Gehr wrote:Thanks!On 01/24/2012 10:28 PM, %u wrote:Issue 7391 - floating wtf dmd 2.057 64Shouldn't this go into 'digitalmars.D' ?It should go straight to the bug tracker.
Jan 28 2012
I've already reported, and it's been fixed in the latest: http://d.puremagic.com/issues/show_bug.cgi?id=7376 On Sat, Jan 28, 2012 at 9:56 AM, sclytrack <sclytrack fake.com> wrote:On 01/25/2012 01:12 AM, Timon Gehr wrote:On 01/24/2012 10:28 PM, %u wrote:Issue 7391 - floating wtf dmd 2.057 64Shouldn't this go into 'digitalmars.D' ?It should go straight to the bug tracker.
Jan 28 2012
Now I've waisted Walter's precious time. I feel so sad now :-( On 01/28/2012 07:49 PM, Caligo wrote:I've already reported, and it's been fixed in the latest: http://d.puremagic.com/issues/show_bug.cgi?id=7376 On Sat, Jan 28, 2012 at 9:56 AM, sclytrack<sclytrack fake.com> wrote:On 01/25/2012 01:12 AM, Timon Gehr wrote:On 01/24/2012 10:28 PM, %u wrote:Issue 7391 - floating wtf dmd 2.057 64Shouldn't this go into 'digitalmars.D' ?It should go straight to the bug tracker.
Jan 28 2012
On Sat, Jan 28, 2012 at 2:04 PM, sclytrack <sclytrack hotmail.com> wrote:Now I've waisted Walter's precious time. I feel so sad now :-(I should have made a post about the fact that I had already bug reported it, but I forgot. Sorry.
Jan 28 2012
Prior to filing the bug I tried to compile dmd from source. I have now succeeded. The only problem I had was a missing symbolic link libstdc++.so and this in Ubuntu 11.10. So I just created it. /usr/lib32/libstdc++.so -> /usr/lib/i386-linux-gnu/libstdc++.so.6 Then "make -f posix" and in the dmd/src directory. The bug is indeed gone. It uses the xmm3 register now to store the intermediate value. Going to clone phobos now. While I'm at it. :-)On 01/29/2012 06:05 AM, Caligo wrote:
Jan 28 2012
On Sunday, January 29, 2012 08:43:54 sclytrack wrote:Prior to filing the bug I tried to compile dmd from source. I have now succeeded. The only problem I had was a missing symbolic link libstdc++.so and this in Ubuntu 11.10. So I just created it. /usr/lib32/libstdc++.so -> /usr/lib/i386-linux-gnu/libstdc++.so.6 Then "make -f posix" and in the dmd/src directory. The bug is indeed gone. It uses the xmm3 register now to store the intermediate value. Going to clone phobos now. While I'm at it. :-)Don't forget druntime. You need it as well if you want to build Phobos. - Jonathan M Davis
Jan 29 2012