|
|
@@ -82,13 +82,13 @@ namespace detail
|
|
|
if((ix>0x7f800000) || // x is nan
|
|
|
(iy>0x7f800000)) // y is nan
|
|
|
return x+y;
|
|
|
- if(compute_equal<float>::call(x, y))
|
|
|
+ if(compute_equal<float, std::numeric_limits<float>::is_iec559>::call(x, y))
|
|
|
return y; // x=y, return y
|
|
|
if(ix==0)
|
|
|
{ // x == 0
|
|
|
GLM_SET_FLOAT_WORD(x,(hy&0x80000000)|1);// return +-minsubnormal
|
|
|
t = x*x;
|
|
|
- if(detail::compute_equal<float>::call(t, x))
|
|
|
+ if(detail::compute_equal<float, true>::call(t, x))
|
|
|
return t;
|
|
|
else
|
|
|
return x; // raise underflow flag
|
|
|
@@ -113,7 +113,7 @@ namespace detail
|
|
|
if(hy<0x00800000) // underflow
|
|
|
{
|
|
|
t = x*x;
|
|
|
- if(!detail::compute_equal<float>::call(t, x))
|
|
|
+ if(!detail::compute_equal<float, true>::call(t, x))
|
|
|
{ // raise underflow flag
|
|
|
GLM_SET_FLOAT_WORD(y,hx);
|
|
|
return y;
|
|
|
@@ -137,13 +137,13 @@ namespace detail
|
|
|
if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || // x is nan
|
|
|
((iy>=0x7ff00000)&&((iy-0x7ff00000)|ly)!=0)) // y is nan
|
|
|
return x+y;
|
|
|
- if(detail::compute_equal<double>::call(x, y))
|
|
|
+ if(detail::compute_equal<double, true>::call(x, y))
|
|
|
return y; // x=y, return y
|
|
|
if((ix|lx)==0)
|
|
|
{ // x == 0
|
|
|
GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal
|
|
|
t = x*x;
|
|
|
- if(detail::compute_equal<double>::call(t, x))
|
|
|
+ if(detail::compute_equal<double, true>::call(t, x))
|
|
|
return t;
|
|
|
else
|
|
|
return x; // raise underflow flag
|
|
|
@@ -171,7 +171,7 @@ namespace detail
|
|
|
if(hy<0x00100000)
|
|
|
{ // underflow
|
|
|
t = x*x;
|
|
|
- if(!detail::compute_equal<double>::call(t, x))
|
|
|
+ if(!detail::compute_equal<double, true>::call(t, x))
|
|
|
{ // raise underflow flag
|
|
|
GLM_INSERT_WORDS(y,hx,lx);
|
|
|
return y;
|