1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-05-22 14:15:08 +00:00

LibM: Add INFINITY macro

This commit is contained in:
Linus Groh 2020-06-04 13:05:27 +01:00 committed by Andreas Kling
parent 8a94813007
commit ead76377b0
3 changed files with 7 additions and 6 deletions

View file

@ -76,8 +76,8 @@ public:
bool is_infinity() const { return is_number() && __builtin_isinf(as_double()); } bool is_infinity() const { return is_number() && __builtin_isinf(as_double()); }
bool is_positive_infinity() const { return is_number() && __builtin_isinf_sign(as_double()) > 0; } bool is_positive_infinity() const { return is_number() && __builtin_isinf_sign(as_double()) > 0; }
bool is_negative_infinity() const { return is_number() && __builtin_isinf_sign(as_double()) < 0; } bool is_negative_infinity() const { return is_number() && __builtin_isinf_sign(as_double()) < 0; }
bool is_positive_zero() const { return is_number() && 1.0 / as_double() == __builtin_huge_val(); } bool is_positive_zero() const { return is_number() && 1.0 / as_double() == INFINITY; }
bool is_negative_zero() const { return is_number() && 1.0 / as_double() == -__builtin_huge_val(); } bool is_negative_zero() const { return is_number() && 1.0 / as_double() == -INFINITY; }
bool is_integer() const { return is_finite_number() && (i32)as_double() == as_double(); } bool is_integer() const { return is_finite_number() && (i32)as_double() == as_double(); }
bool is_finite_number() const bool is_finite_number() const
{ {
@ -257,12 +257,12 @@ inline Value js_nan()
inline Value js_infinity() inline Value js_infinity()
{ {
return Value(__builtin_huge_val()); return Value(INFINITY);
} }
inline Value js_negative_infinity() inline Value js_negative_infinity()
{ {
return Value(-__builtin_huge_val()); return Value(-INFINITY);
} }
Value greater_than(Interpreter&, Value lhs, Value rhs); Value greater_than(Interpreter&, Value lhs, Value rhs);

View file

@ -213,7 +213,7 @@ double log(double x)
if (x < 0) if (x < 0)
return NAN; return NAN;
if (x == 0) if (x == 0)
return -__builtin_huge_val(); return -INFINITY;
double y = 1 + 2 * (x - 1) / (x + 1); double y = 1 + 2 * (x - 1) / (x + 1);
double exponentiated = exp(y); double exponentiated = exp(y);
y = y + 2 * (x - exponentiated) / (x + exponentiated); y = y + 2 * (x - exponentiated) / (x + exponentiated);
@ -257,7 +257,7 @@ double exp(double exponent)
if (integer_part & 32) if (integer_part & 32)
result *= e_to_power<32>(); result *= e_to_power<32>();
if (integer_part >= 64) if (integer_part >= 64)
return __builtin_huge_val(); return INFINITY;
} }
exponent -= integer_part; exponent -= integer_part;
} else if (exponent < 0) } else if (exponent < 0)

View file

@ -31,6 +31,7 @@
__BEGIN_DECLS __BEGIN_DECLS
#define HUGE_VAL 1e10000 #define HUGE_VAL 1e10000
#define INFINITY __builtin_huge_val()
#define NAN __builtin_nan("") #define NAN __builtin_nan("")
#define M_E 2.718281828459045 #define M_E 2.718281828459045
#define M_PI 3.141592653589793 #define M_PI 3.141592653589793