digitalmars.D.bugs - [Issue 24040] New: dmd different to ldc and gcc for ldexp(f)
- d-bugmail puremagic.com (45/45) Jul 07 2023 https://issues.dlang.org/show_bug.cgi?id=24040
https://issues.dlang.org/show_bug.cgi?id=24040 Issue ID: 24040 Summary: dmd different to ldc and gcc for ldexp(f) Product: D Version: D2 Hardware: x86_64 OS: Linux Status: NEW Severity: normal Priority: P1 Component: druntime Assignee: nobody puremagic.com Reporter: john.loughran.colvin gmail.com I am surprised to see the different behaviour from dmd below: dev dev:~$ cat testfloat.d import std.stdio; static import core.math; static import core.stdc.math; static ulong mantissa = 0x8000000000000001UL; void main() { float a = core.math.ldexp(float(mantissa), -213); float b = core.stdc.math.ldexpf(float(mantissa), -213); writeln(*cast(uint*)&a); writeln(*cast(uint*)&b); } dev dev:~$ dmd -run testfloat.d 1 0 dev dev:~$ ldmd2 -run testfloat.d 0 0 dev dev:~$ cat test.cpp #include <cmath> #include <iostream> int main() { float p = ldexp(0x8000000000000001UL, -213); float q = ldexpf(0x8000000000000001UL, -213); std::cout << *((unsigned int*)&p) << std::endl; std::cout << *((unsigned int*)&q) << std::endl; } dev dev:~$ g++ test.cpp -o test_cpp dev dev:~$ ./test_cpp 0 0 --
Jul 07 2023