--- a/LongFloat.st Tue Jul 25 16:36:59 2017 +0200
+++ b/LongFloat.st Tue Jul 25 17:09:56 2017 +0200
@@ -2066,6 +2066,50 @@
"
!
+isInfinite
+ "return true, if the receiver is an infinite float (Inf).
+ These are not created by ST/X float operations (they raise an exception);
+ however, inline C-code could produce them ...
+ Redefined here for speed"
+
+%{ /* NOCONTEXT */
+
+#ifdef LONG_infinite
+ LONGFLOAT lV = __longFloatVal(self);
+
+ if (LONG_infinite(lV)) { RETURN (true); }
+ RETURN (false);
+#else
+# if defined(LONG_finite) && defined(LONG_isnan)
+ LONGFLOAT lV = __longFloatVal(self);
+
+ if (!LONG_finite(lV) && !LONG_isnan(lV) ) { RETURN (true); }
+ RETURN (false);
+# endif
+#endif
+%}.
+ ^ self isFinite not and:[self isNaN not]
+
+ "
+ 1.0 asLongFloat isFinite -> true
+ 1.0 asLongFloat isInfinite -> false
+
+ (0.0 asLongFloat uncheckedDivide: 0.0) isFinite -> false
+ (0.0 asLongFloat uncheckedDivide: 0.0) isInfinite -> false
+ (0.0 asLongFloat uncheckedDivide: 0.0) isNaN -> true
+
+ (1.0 asLongFloat uncheckedDivide: 0.0) isFinite -> false
+ (1.0 asLongFloat uncheckedDivide: 0.0) isInfinite -> true
+ (1.0 asLongFloat uncheckedDivide: 0.0) isNaN -> false
+
+ (-1.0 asLongFloat uncheckedDivide: 0.0) isFinite -> false
+ (-1.0 asLongFloat uncheckedDivide: 0.0) isInfinite -> true
+ (-1.0 asLongFloat uncheckedDivide: 0.0) isNaN -> false
+ "
+
+ "Created: / 25-07-2017 / 17:04:04 / cg"
+!
+
isNaN
"return true, if the receiver is an invalid float (NaN - not a number).
These are not created by ST/X float operations (they raise an exception);