summaryrefslogtreecommitdiff
path: root/numeric.c
diff options
context:
space:
mode:
authorusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-27 05:42:06 +0000
committerusa <usa@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-02-27 05:42:06 +0000
commitc691d55bcdd09081bb18d7ee88983175470f7249 (patch)
tree705aef9e5624c904317f94b4a2a0c89472f760c5 /numeric.c
parent6792751d4f134d7c97495c5b5044df3b03f6ba5a (diff)
* numeric.c (flo_eq, flo_gt, flo_ge, flo_lt, flo_le, flo_eql): revert
isnan() checks for VC++6. * insns.def (opt_lt, opt_gt): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22654 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'numeric.c')
-rw-r--r--numeric.c37
1 files changed, 36 insertions, 1 deletions
diff --git a/numeric.c b/numeric.c
index f987610362..2d6691de61 100644
--- a/numeric.c
+++ b/numeric.c
@@ -874,11 +874,17 @@ flo_eq(VALUE x, VALUE y)
break;
case T_FLOAT:
b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(b)) return Qfalse;
+#endif
break;
default:
return num_equal(x, y);
}
a = RFLOAT_VALUE(x);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(a)) return Qfalse;
+#endif
return (a == b)?Qtrue:Qfalse;
}
@@ -968,11 +974,17 @@ flo_gt(VALUE x, VALUE y)
case T_FLOAT:
b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(b)) return Qfalse;
+#endif
break;
default:
return rb_num_coerce_relop(x, y, '>');
}
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(a)) return Qfalse;
+#endif
return (a > b)?Qtrue:Qfalse;
}
@@ -1001,11 +1013,17 @@ flo_ge(VALUE x, VALUE y)
case T_FLOAT:
b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(b)) return Qfalse;
+#endif
break;
default:
return rb_num_coerce_relop(x, y, rb_intern(">="));
}
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(a)) return Qfalse;
+#endif
return (a >= b)?Qtrue:Qfalse;
}
@@ -1033,11 +1051,17 @@ flo_lt(VALUE x, VALUE y)
case T_FLOAT:
b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(b)) return Qfalse;
+#endif
break;
default:
return rb_num_coerce_relop(x, y, '<');
}
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(a)) return Qfalse;
+#endif
return (a < b)?Qtrue:Qfalse;
}
@@ -1066,11 +1090,17 @@ flo_le(VALUE x, VALUE y)
case T_FLOAT:
b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(b)) return Qfalse;
+#endif
break;
default:
return rb_num_coerce_relop(x, y, rb_intern("<="));
}
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(a)) return Qfalse;
+#endif
return (a <= b)?Qtrue:Qfalse;
}
@@ -1089,7 +1119,12 @@ static VALUE
flo_eql(VALUE x, VALUE y)
{
if (TYPE(y) == T_FLOAT) {
- if (RFLOAT_VALUE(x) == RFLOAT_VALUE(y))
+ double a = RFLOAT_VALUE(x);
+ double b = RFLOAT_VALUE(y);
+#if defined(_MSC_VER) && _MSC_VER < 1300
+ if (isnan(a) || isnan(b)) return Qfalse;
+#endif
+ if (a == b)
return Qtrue;
}
return Qfalse;