diff options
| author | Bruce Hill <bruce@bruce-hill.com> | 2024-10-03 14:19:23 -0400 |
|---|---|---|
| committer | Bruce Hill <bruce@bruce-hill.com> | 2024-10-03 14:19:23 -0400 |
| commit | 8f346b48aa49ac0590c9c77edb75c63560398e1a (patch) | |
| tree | 4aa6315dc6a43e0118b6cb12efbb6193bea351c0 /stdlib/nums.c | |
| parent | 35a19a2d1bb7605fa6ceb038b2b8afee760cd11c (diff) | |
Fix up some compiler flags around floating point numbers so they work
better with -Ofast and have more standardized behavior
Diffstat (limited to 'stdlib/nums.c')
| -rw-r--r-- | stdlib/nums.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/stdlib/nums.c b/stdlib/nums.c index 1eba2862..1a8fec21 100644 --- a/stdlib/nums.c +++ b/stdlib/nums.c @@ -52,7 +52,7 @@ public Text_t Num$scientific(double f, Int_t precision) { return Text$format("%.*e", (int)Int_to_Int64(precision, false), f); } -public double Num$mod(double num, double modulus) { +public CONSTFUNC double Num$mod(double num, double modulus) { double result = fmod(num, modulus); return (result < 0) != (modulus < 0) ? result + modulus : result; } @@ -79,9 +79,9 @@ public double Num$nan(Text_t tag) { return nan(Text$as_c_string(tag)); } -public CONSTFUNC bool Num$isinf(double n) { return !!isinf(n); } -public CONSTFUNC bool Num$finite(double n) { return !!finite(n); } -public CONSTFUNC bool Num$isnan(double n) { return !!isnan(n); } +public CONSTFUNC bool Num$isinf(double n) { return (fpclassify(n) == FP_INFINITE); } +public CONSTFUNC bool Num$finite(double n) { return (fpclassify(n) != FP_INFINITE); } +public CONSTFUNC bool Num$isnan(double n) { return (fpclassify(n) == FP_NAN); } public const TypeInfo_t Num$info = { .size=sizeof(double), @@ -133,7 +133,7 @@ public Text_t Num32$scientific(float f, Int_t precision) { return Text$format("%.*e", (int)Int_to_Int64(precision, false), (double)f); } -public float Num32$mod(float num, float modulus) { +public CONSTFUNC float Num32$mod(float num, float modulus) { float result = fmodf(num, modulus); return (result < 0) != (modulus < 0) ? result + modulus : result; } @@ -160,9 +160,9 @@ public float Num32$nan(Text_t tag) { return nanf(Text$as_c_string(tag)); } -public CONSTFUNC bool Num32$isinf(float n) { return isinf(n); } -public CONSTFUNC bool Num32$finite(float n) { return finite(n); } -public CONSTFUNC bool Num32$isnan(float n) { return isnan(n); } +public CONSTFUNC bool Num32$isinf(float n) { return (fpclassify(n) == FP_INFINITE); } +public CONSTFUNC bool Num32$finite(float n) { return (fpclassify(n) != FP_INFINITE); } +public CONSTFUNC bool Num32$isnan(float n) { return (fpclassify(n) == FP_NAN); } public const TypeInfo_t Num32$info = { .size=sizeof(float), |
