summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arith.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/arith.c b/arith.c
index e5d5216c..971be237 100644
--- a/arith.c
+++ b/arith.c
@@ -2913,13 +2913,20 @@ val int_flo(val f)
{
val self = lit("int-flo");
double d = c_flo(f, self);
+#if SIZEOF_PTR >= 8
+ cnum margin = 512;
+ ucnum umargin = 1024;
+#else
+ cnum margin = 0;
+ ucnum umargin = 0;
+#endif
- if (d >= INT_PTR_MIN && d <= INT_PTR_MAX) {
+ if (d >= INT_PTR_MIN && d <= INT_PTR_MAX - margin) {
cnum n = d;
if (n < NUM_MIN || n > NUM_MAX)
return bignum(n);
return num_fast(n);
- } else if (d >= 0 && d <= UINT_PTR_MAX) {
+ } else if (d >= 0 && d <= UINT_PTR_MAX - umargin) {
ucnum n = d;
return unum(n);
} else {