diff --git a/src/stdlib/nums.c b/src/stdlib/nums.c index 93e2b21..ca8dcc4 100644 --- a/src/stdlib/nums.c +++ b/src/stdlib/nums.c @@ -125,11 +125,11 @@ public CONSTFUNC bool Num32$near(float a, float b, float ratio, float absolute) if (a == b) return true; - float diff = fabs(a - b); + float diff = fabsf(a - b); if (diff < absolute) return true; else if (isnan(diff)) return false; - float epsilon = fabs(a * ratio) + fabs(b * ratio); + float epsilon = fabsf(a * ratio) + fabsf(b * ratio); if (isinf(epsilon)) epsilon = FLT_MAX; return (diff < epsilon); } diff --git a/src/stdlib/nums.h b/src/stdlib/nums.h index f355fb6..3f0cccc 100644 --- a/src/stdlib/nums.h +++ b/src/stdlib/nums.h @@ -100,7 +100,7 @@ MACROLIKE CONSTFUNC float Num32$from_int(Int_t i, bool truncate) { float ret = (float)mpz_get_d(*i.big); if (!truncate) { mpz_t roundtrip; - mpz_init_set_d(roundtrip, ret); + mpz_init_set_d(roundtrip, (double)ret); if unlikely (mpz_cmp(*i.big, roundtrip) != 0) fail("Could not convert integer to 32-bit floating point without losing precision: ", i); } diff --git a/src/stdlib/optionals.c b/src/stdlib/optionals.c index d91ebff..462b2df 100644 --- a/src/stdlib/optionals.c +++ b/src/stdlib/optionals.c @@ -81,9 +81,9 @@ public void Optional$deserialize(FILE *in, void *outval, Array_t *pointers, cons else if (nonnull->tag == TableInfo) *(Table_t*)outval = (Table_t){.entries={.length=-1}}; else if (nonnull == &Num$info) - *(double*)outval = NAN; + *(double*)outval = (double)NAN; else if (nonnull == &Num32$info) - *(float*)outval = NAN; + *(float*)outval = (float)NAN; else if (nonnull->tag == StructInfo || (nonnull->tag == OpaqueInfo && type->size > nonnull->size)) memset(outval + type->size, -1, (size_t)(type->size - nonnull->size)); else