Skip to content

Commit e7fed93

Browse files
committed
Fix NaN and Infinity on Win64.
Using the numerical limits (e.g. std::numeric_limits<double>::quiet_NaN()) seems not return the expected value. This fixes issue ldc-developers#750.
1 parent 65f9bb5 commit e7fed93

File tree

1 file changed

+13
-5
lines changed

1 file changed

+13
-5
lines changed

dmd2/root/port.c

+13-5
Original file line numberDiff line numberDiff line change
@@ -178,11 +178,19 @@ static PortInitializer portinitializer;
178178
PortInitializer::PortInitializer()
179179
{
180180
#if IN_LLVM
181-
Port::nan = std::numeric_limits<double>::quiet_NaN();
182-
Port::ldbl_nan = std::numeric_limits<double>::quiet_NaN();
183-
Port::snan = std::numeric_limits<double>::signaling_NaN();
184-
Port::infinity = std::numeric_limits<double>::infinity();
185-
Port::ldbl_infinity = std::numeric_limits<double>::infinity();
181+
union {
182+
unsigned long ul[2];
183+
double d;
184+
}
185+
nan = { { 0, 0x7FF80000 } },
186+
snan = { { 0, 0x7FFC0000 } },
187+
inf = { { 0, 0x7FF00000 } };
188+
189+
Port::nan = nan.d;
190+
Port::ldbl_nan = nan.d;
191+
Port::snan = snan.d;
192+
Port::infinity = inf.d;
193+
Port::ldbl_infinity = inf.d;
186194
#else
187195
union {
188196
unsigned long ul[2];

0 commit comments

Comments
 (0)