mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
.
This commit is contained in:
@ -21,7 +21,7 @@
|
||||
*/
|
||||
|
||||
#include <math.h>
|
||||
#include "math_private.h"
|
||||
#include <math_private.h>
|
||||
#include <float.h>
|
||||
|
||||
#ifdef __STDC__
|
||||
@ -45,10 +45,12 @@
|
||||
return x+y;
|
||||
if((long double) x==y) return y; /* x=y, return y */
|
||||
if(ix==0) { /* x == 0 */
|
||||
float x2;
|
||||
float u;
|
||||
SET_FLOAT_WORD(x,(u_int32_t)(hy&0x80000000)|1);/* return +-minsub*/
|
||||
x2 = x*x;
|
||||
if(x2==x) return x2; else return x; /* raise underflow flag */
|
||||
u = math_opt_barrier (x);
|
||||
u = u * u;
|
||||
math_force_eval (u); /* raise underflow flag */
|
||||
return x;
|
||||
}
|
||||
if(hx>=0) { /* x > 0 */
|
||||
if(hy<0||(ix>>23)>(iy>>20)-0x380
|
||||
@ -70,15 +72,12 @@
|
||||
x = x+x; /* overflow */
|
||||
if (FLT_EVAL_METHOD != 0)
|
||||
/* Force conversion to float. */
|
||||
asm ("" : "=m"(x) : "m"(x));
|
||||
asm ("" : "+m"(x));
|
||||
return x;
|
||||
}
|
||||
if(hy<0x00800000) { /* underflow */
|
||||
float x2 = x*x;
|
||||
if(x2!=x) { /* raise underflow flag */
|
||||
SET_FLOAT_WORD(x2,hx);
|
||||
return x2;
|
||||
}
|
||||
if(hy<0x00800000) {
|
||||
float u = x*x; /* underflow */
|
||||
math_force_eval (u); /* raise underflow flag */
|
||||
}
|
||||
SET_FLOAT_WORD(x,hx);
|
||||
return x;
|
||||
|
Reference in New Issue
Block a user