--- a/Float.st Sat Jan 23 01:10:11 2016 +0100
+++ b/Float.st Sat Jan 23 01:10:24 2016 +0100
@@ -1,5 +1,3 @@
-"{ Encoding: utf8 }"
-
"
COPYRIGHT (c) 1988 by Claus Gittinger
All Rights Reserved
@@ -1790,26 +1788,34 @@
OBJ newFloat;
if (__isFloatLike(n)) {
- __threadErrno = 0;
- rslt = pow(__floatVal(self), __floatVal(n));
- if (! isnan(rslt)) /* Currently all our systems support isnan() */
- {
- if (__threadErrno == 0) {
- __qMKFLOAT(newFloat, rslt);
- RETURN ( newFloat );
- }
- }
+ __threadErrno = 0;
+ rslt = pow(__floatVal(self), __floatVal(n));
+ if (! isnan(rslt)) /* Currently all our systems support isnan() */
+ {
+ if (__threadErrno == 0) {
+ __qMKFLOAT(newFloat, rslt);
+ RETURN ( newFloat );
+ }
+ }
}
%}.
+ "/ the c-library pow functin, has a bug:
+ "/ it does not deal correctly with negative numbers.
+ "/ I.e. it raises an error on -8^(1/3) instead of returning a negative -2
+ "/ work around with a kludge:
+ self < 0 ifTrue:[
+ ^ (self negated raisedTo:n) negated
+ ].
+
"
an invalid argument (not convertable to float ?)
"
^ self class
- raise:#domainErrorSignal
- receiver:self
- selector:#raisedTo:
- arguments:(Array with:aNumber)
- errorString:'bad receiver/arg in raisedTo:'
+ raise:#domainErrorSignal
+ receiver:self
+ selector:#raisedTo:
+ arguments:(Array with:aNumber)
+ errorString:'bad receiver/arg in raisedTo:'
"Modified: / 16.11.2001 / 14:16:51 / cg"
!