1515#include "double_extras.h"
1616#include "d_vec.h"
1717
18+ static int
19+ _check_results (double res1 , double res2 )
20+ {
21+ if (d_is_nan (res2 ))
22+ return d_is_nan (res1 );
23+ else
24+ #if !defined(_MSC_VER )
25+ return res1 == res2 ;
26+ #else
27+ /* MSVC's ldexp doesn't give the same result as multiplying by 2^e
28+ for subnormals, so relax the test */
29+ return (res1 == res2 ) || fabs (res1 - res2 ) < 1e-300 ;
30+ #endif
31+ }
32+
1833TEST_FUNCTION_START (d_mul_2exp , state )
1934{
2035 double x , res1 , res2 ;
21- int e , ok ;
36+ int e ;
2237 slong iter ;
2338
2439 for (iter = 0 ; iter < 10000 * flint_test_multiplier (); iter ++ )
@@ -29,12 +44,7 @@ TEST_FUNCTION_START(d_mul_2exp, state)
2944 res1 = d_mul_2exp (x , e );
3045 res2 = ldexp (x , e );
3146
32- if (d_is_nan (res2 ))
33- ok = d_is_nan (res1 );
34- else
35- ok = res1 == res2 ;
36-
37- if (!ok )
47+ if (!_check_results (res1 , res2 ))
3848 TEST_FUNCTION_FAIL ("x = %.20g\n res1 = %.20g\n res2 = %.20g\n" , x , res1 , res2 );
3949 }
4050
@@ -48,9 +58,7 @@ TEST_FUNCTION_START(d_mul_2exp, state)
4858 res1 = d_mul_2exp_inrange2 (x , e );
4959 res2 = ldexp (x , e );
5060
51- ok = res1 == res2 ;
52-
53- if (!ok )
61+ if (!(res1 == res2 ))
5462 TEST_FUNCTION_FAIL ("x = %.20g\n res1 = %.20g\n res2 = %.20g\n" , x , res1 , res2 );
5563 }
5664
@@ -62,12 +70,7 @@ TEST_FUNCTION_START(d_mul_2exp, state)
6270 res1 = d_mul_2exp_inrange (x , e );
6371 res2 = ldexp (x , e );
6472
65- if (d_is_nan (res2 ))
66- ok = d_is_nan (res1 );
67- else
68- ok = res1 == res2 ;
69-
70- if (!ok )
73+ if (!_check_results (res1 , res2 ))
7174 TEST_FUNCTION_FAIL ("x = %.20g\n res1 = %.20g\n res2 = %.20g\n" , x , res1 , res2 );
7275 }
7376
@@ -89,12 +92,7 @@ TEST_FUNCTION_START(d_mul_2exp, state)
8992 res1 = r [i ];
9093 res2 = ldexp (v [i ], e );
9194
92- if (d_is_nan (res2 ))
93- ok = d_is_nan (res1 );
94- else
95- ok = res1 == res2 ;
96-
97- if (!ok )
95+ if (!_check_results (res1 , res2 ))
9896 TEST_FUNCTION_FAIL ("x = %.20g\n res1 = %.20g\n res2 = %.20g\n" , x , res1 , res2 );
9997 }
10098 }
0 commit comments