--- a/Float.st Tue Feb 03 15:18:38 2015 +0100
+++ b/Float.st Tue Feb 03 15:20:18 2015 +0100
@@ -11,6 +11,8 @@
"
"{ Package: 'stx:libbasic' }"
+"{ NameSpace: Smalltalk }"
+
LimitedPrecisionReal variableByteSubclass:#Float
instanceVariableNames:''
classVariableNames:'DefaultPrintFormat Pi E Halfpi HalfpiNegative Twopi
@@ -443,7 +445,6 @@
^ Epsilon
! !
-
!Float class methodsFor:'binary storage'!
readBinaryIEEEDoubleFrom:aStream
@@ -762,7 +763,6 @@
! !
-
!Float methodsFor:'arithmetic'!
* aNumber
@@ -1747,7 +1747,6 @@
"Modified: / 16.11.2001 / 14:14:43 / cg"
! !
-
!Float methodsFor:'printing & storing'!
printString
@@ -2183,25 +2182,20 @@
%{ /* NOCONTEXT */
- double dV = __floatVal(self);
-
/*
* notice: on machines which do not provide
* a finite() macro or function (WIN32),
* this may always ret true here ...
*/
- if (isfinite(dV)) {
- RETURN (true);
- }
+ RETURN (isfinite(__floatVal(self)) ? true : false)
%}.
- ^ false
"
- 1.0 isFinite
- Float NaN isFinite
- Float infinity isFinite
- (0.0 uncheckedDivide: 0.0) isFinite
- (1.0 uncheckedDivide: 0.0) isFinite
+ 1.0 isFinite
+ self NaN isFinite
+ self infinity isFinite
+ (0.0 uncheckedDivide: 0.0) isFinite
+ (1.0 uncheckedDivide: 0.0) isFinite
"
!
@@ -2252,34 +2246,24 @@
%{ /* NOCONTEXT */
- double dV = (__floatVal(self));
-
- if (isnan(dV)) {
- RETURN (true);
- }
+ RETURN (isnan(__floatVal(self)) ? true : false)
%}.
- ^ false
"
- 1.0 isNaN
- (0.0 uncheckedDivide: 0.0) isNaN
- (1.0 uncheckedDivide: 0.0) isNaN
- (-1.0 uncheckedDivide: 0.0) isNaN
+ self NaN isNaN
+ 1.0 isNaN
+ (0.0 uncheckedDivide: 0.0) isNaN
+ (1.0 uncheckedDivide: 0.0) isNaN
+ (-1.0 uncheckedDivide: 0.0) isNaN
"
!
isNegativeZero
"many systems have two float.Pnt zeros"
-%{
-#if defined(__i386__) && defined(LINUX)
- unsigned int biasedExponent;
-
- biasedExponent = ((short *)(__ByteArrayInstPtr(self)->ba_element))[3] & 0xFF70;
- RETURN ((biasedExponent == 0x8000) ? true : false );
-#endif
+%{ /* NOCONTEXT */
+ RETURN ( (__floatVal(self) == 0.0 && signbit(__floatVal(self)) != 0) ? true : false );
%}.
- ^ super isNegativeZero
"
0.0 isNegativeZero
@@ -2290,12 +2274,23 @@
!
negative
- "return true if the receiver is less than zero"
+ "return true if the receiver is less than zero.
+ -0.0 is positive for now."
%{ /* NOCONTEXT */
- RETURN ( (__floatVal(self) < 0.0) ? true : false );
+ RETURN ( __floatVal(self) < 0.0 ? true : false );
+ // RETURN ( signbit(__floatVal(self)) != 0 ? true : false );
%}.
+
+ "
+ 0.0 negative
+ -0.0 negative
+ 1.0 negative
+ -1.0 negative
+ (1.0 uncheckedDivide: 0.0) negative
+ (-1.0 uncheckedDivide: 0.0) negative
+ "
!
numberOfBits
@@ -2315,12 +2310,23 @@
!
positive
- "return true if the receiver is greater or equal to zero"
+ "return true if the receiver is greater or equal to zero.
+ 0.0 and -0.0 are positive for now."
%{ /* NOCONTEXT */
- RETURN ( (__floatVal(self) >= 0.0) ? true : false );
-%}
+ RETURN ( __floatVal(self) >= 0.0 ? true : false );
+ // RETURN ( signbit(__floatVal(self)) == 0 ? true : false );
+%}.
+
+ "
+ 0.0 positive
+ -0.0 positive
+ 1.0 positive
+ -1.0 positive
+ (1.0 uncheckedDivide: 0.0) positive
+ (-1.0 uncheckedDivide: 0.0) positive
+ "
!
strictlyPositive
@@ -3074,11 +3080,11 @@
!Float class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Float.st,v 1.206 2014-12-18 12:41:51 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Float.st,v 1.207 2015-02-03 14:20:18 stefan Exp $'
!
version_CVS
- ^ '$Header: /cvs/stx/stx/libbasic/Float.st,v 1.206 2014-12-18 12:41:51 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Float.st,v 1.207 2015-02-03 14:20:18 stefan Exp $'
! !