aboutsummaryrefslogtreecommitdiff
path: root/stdlib/nums.c
diff options
context:
space:
mode:
authorBruce Hill <bruce@bruce-hill.com>2024-10-03 14:19:23 -0400
committerBruce Hill <bruce@bruce-hill.com>2024-10-03 14:19:23 -0400
commit8f346b48aa49ac0590c9c77edb75c63560398e1a (patch)
tree4aa6315dc6a43e0118b6cb12efbb6193bea351c0 /stdlib/nums.c
parent35a19a2d1bb7605fa6ceb038b2b8afee760cd11c (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.c16
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),