LargeFloat.st
author Claus Gittinger <cg@exept.de>
Mon, 12 Jun 2017 21:05:17 +0200
changeset 21803 63325b999dbf
parent 8634 2c838074e754
child 21902 f6dbcc8f2757
permissions -rw-r--r--
#DOCUMENTATION by cg class: LargeFloat comment/format in: #asLargeFloat
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2003 by eXept Software AG
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
21803
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
    12
"{ Package: 'stx:libbasic' }"
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
21803
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
    14
"{ NameSpace: Smalltalk }"
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    16
LimitedPrecisionReal subclass:#LargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	instanceVariableNames:'exponent mantissa precision'
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	classVariableNames:'Zero One NaN PositiveInfinity NegativeInfinity Pi_1000 E_1000'
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
	poolDictionaries:''
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
	category:'Magnitude-Numbers'
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
!LargeFloat class methodsFor:'documentation'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
copyright
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
 COPYRIGHT (c) 2003 by eXept Software AG
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
              All Rights Reserved
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 This software is furnished under a license and may be used
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 only in accordance with the terms of that license and with the
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 inclusion of the above copyright notice.   This software may not
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 be provided or otherwise made available to, or used by, any
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
 other person.  No title to or ownership of the software is
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
 hereby transferred.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
documentation
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
"
7547
7c6a67444648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7546
diff changeset
    41
    Experimental Code.
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
    42
    The implementation is neither complete nor tuned for performance - still being developed.
7547
7c6a67444648 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7546
diff changeset
    43
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    This class provides arbitrary precision floats. These are represented as:
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
      exponent,
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
      mantissa
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
    [author:]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    49
        Claus Gittinger
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    50
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    51
    [see also:]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    52
        Number
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    53
        Float LongFloat ShortFloat Fraction FixedPoint 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
        SmallInteger LargeInteger
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
examples
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
     (1 to:1000) inject:1 asLargeFloat into:[:p :m | p * m]          
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
    62
     (1 to:1000) inject:1 into:[:p :m | p * m]                 
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
     Time millisecondsToRun:[ 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
        (1 to:20000) inject:1 asLargeFloat into:[:p :m | p * m]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    66
     ]  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    67
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
     Time millisecondsToRun:[ 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
        (1 to:20000) inject:1 into:[:p :m | p * m]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
     ]   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    73
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    74
!LargeFloat class methodsFor:'instance creation'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    75
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    76
fromInteger:anInteger
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    77
    ^ self basicNew 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    78
        mantissa:anInteger 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    79
        exponent:0
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    80
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    81
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    82
     LargeFloat fromInteger:123456
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    83
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
     1 asLargeFloat       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    85
     2 asLargeFloat       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    86
     1000 factorial asLargeFloat             
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    87
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    88
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    89
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    90
fromLimitedPrecisionReal:aLimitedPrecisionReal
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    91
    |shifty numBytes numBitsInMantissa maskMantissa numBitsInExponent maskExponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    92
     numIntegerBits numBits biasExponent lpRealClass sign expPart fractionPart fraction exp|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    93
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
    aLimitedPrecisionReal isFinite ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
        aLimitedPrecisionReal isNaN ifTrue:[^ self NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
        aLimitedPrecisionReal > 0 ifTrue:[^ self infinity].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
        ^ self negativeInfinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    lpRealClass := aLimitedPrecisionReal class.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
    numBytes := aLimitedPrecisionReal basicSize.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    numBitsInMantissa := lpRealClass numBitsInMantissa. maskMantissa := (1 bitShift:numBitsInMantissa) - 1.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
    numBitsInExponent := lpRealClass numBitsInExponent. maskExponent := (1 bitShift:numBitsInExponent) - 1.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    numIntegerBits := lpRealClass numBitsInIntegerPart.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
    numBits := numBitsInMantissa + numBitsInExponent. 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    biasExponent := maskExponent bitShift:-1.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
    shifty := LargeInteger basicNew numberOfDigits:numBytes.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
    UninterpretedBytes isBigEndian ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
        1 to:numBytes do:[:i | shifty digitAt:(numBytes+1-i) put:(aLimitedPrecisionReal basicAt:i)].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
    ] ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
        1 to:numBytes do:[:i | shifty digitAt:i put:(aLimitedPrecisionReal basicAt:i)].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
    sign := (shifty bitAt:numBits+1) == 0 ifTrue: [1] ifFalse: [-1].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    expPart := (shifty bitShift:numBitsInMantissa negated) bitAnd: maskExponent.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
    fractionPart := shifty bitAnd:maskMantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    ( expPart=0 and: [ fractionPart=0 ] ) ifTrue: [ ^ self zero  ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
    numIntegerBits == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   120
        " Replace omitted leading 1 in fraction (Notice: quadIEEE format does not do this)"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   121
        fraction := fractionPart bitOr: (maskMantissa + 1).
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   122
    ] ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   123
        fraction := fractionPart.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   124
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   125
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   126
    "Unbias exponent"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   127
    exp := biasExponent - expPart + (numBitsInMantissa - numIntegerBits).
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   128
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   129
    ^ self basicNew 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   130
        mantissa:(fraction * sign) 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   131
        exponent:(exp negated)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   132
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   133
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   134
     1.0 asLargeFloat       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
     2.0 asLargeFloat       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
     20000.0 asLargeFloat   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
     2e6 asLargeFloat                                  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   138
     1e300 asLargeFloat             
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   139
     2e300 asLargeFloat             
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
     0.5 asLargeFloat      
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
     0.25 asLargeFloat     
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
     (1.0/20000.0) asLargeFloat 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   144
     2e-6 asLargeFloat        
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   145
     2e-300 asLargeFloat      
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
     -1.0 asLargeFloat       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
     -0.5 asLargeFloat      
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   150
     Float NaN asLargeFloat              
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
     Float infinity asLargeFloat         
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   152
     Float negativeInfinity asLargeFloat 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
mantissa:m exponent:e
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
    ^ self basicNew mantissa:m exponent:e
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   159
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   160
     LargeFloat mantissa:1 exponent:0 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   161
     LargeFloat mantissa:2 exponent:0 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
     LargeFloat mantissa:4 exponent:0   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
     LargeFloat mantissa:8 exponent:0 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
     LargeFloat mantissa:1 exponent:-1
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
     LargeFloat mantissa:1 exponent:-2
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   166
     LargeFloat mantissa:1 exponent:-3
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   167
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   168
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
mantissa:m exponent:e precision:p
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
    ^ self basicNew mantissa:m exponent:e precision:p
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   173
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   174
!LargeFloat class methodsFor:'class initialization'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   175
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
initialize
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
    NaN := self mantissa:0 exponent:999.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
    PositiveInfinity := self mantissa:0 exponent:1.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   179
    NegativeInfinity := self mantissa:0 exponent:-1.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   180
    One := self mantissa:1 exponent:0.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   181
    Zero := self mantissa:0 exponent:0.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   182
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   183
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   184
     LargeFloat initialize
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   185
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   186
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   187
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   188
!LargeFloat class methodsFor:'constants'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   189
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   190
NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   191
    ^ NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   192
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   194
     LargeFloat NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   195
     (0.0 uncheckedDivide:0.0)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   196
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   197
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   198
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   199
infinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   200
    ^ PositiveInfinity 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   201
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   202
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   203
     LargeFloat infinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   204
     (1.0 uncheckedDivide:0.0)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   205
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   206
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   207
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   208
negativeInfinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
    ^ NegativeInfinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
     LargeFloat negativeInfinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
     (-1.0 uncheckedDivide:0.0)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   217
pi
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   218
    Pi_1000 isNil ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   219
        Pi_1000 := FixedPoint pi asLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   220
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   221
    ^ Pi_1000.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   222
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   223
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   224
     LargeFloat pi
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
unity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
    ^ One
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
     LargeFloat unity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
zero
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
    ^ Zero
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   240
     LargeFloat zero
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   241
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   242
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   243
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   244
!LargeFloat class methodsFor:'queries'!
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   245
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   246
radix
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   247
   "answer the radix of a LargeFloats exponent"
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   248
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   249
    ^ 2 
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   250
! !
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   251
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   252
!LargeFloat methodsFor:'accessing'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   254
exponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   255
    ^ exponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   256
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   257
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   258
mantissa
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
    ^ mantissa
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   261
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   262
precision
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   263
    ^ precision ? 200
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   264
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   265
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   266
!LargeFloat methodsFor:'arithmetic'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   267
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   268
* aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   269
    ^ aNumber productFromLargeFloat:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   270
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   271
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   272
+ aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   273
    ^ aNumber sumFromLargeFloat:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   274
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   275
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
     1.0 asLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
- aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    ^ aNumber differenceFromLargeFloat:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
/ aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
    ^ aNumber quotientFromLargeFloat:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   287
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
negated
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   289
    mantissa = 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   290
        exponent = 0 ifTrue:[ ^ self ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   291
        self == NaN ifTrue:[^ self].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   292
        self == NegativeInfinity ifTrue:[^ PositiveInfinity].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   293
        ^ NegativeInfinity
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   294
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   295
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   296
    ^ self class 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   297
        mantissa:(mantissa negated)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   298
        exponent:exponent 
7459
9cc5219fa2cd *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7445
diff changeset
   299
        precision:self precision.
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   300
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   301
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   302
     LargeFloat unity negated
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   303
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   304
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   305
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   306
!LargeFloat methodsFor:'coercing & converting'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   307
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   308
asInteger
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   309
    "return an integer with same value - might truncate"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   310
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   311
    exponent = 0 ifTrue:[^ mantissa].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   312
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   313
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   314
        "/ INF or NAN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   315
        ^ self class
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   316
            raise:#domainErrorSignal
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   317
            receiver:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   318
            selector:#asInteger
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   319
            arguments:#()
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   320
            errorString:'Cannot represent non-finite as integer'.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   321
"/        ^ self asMetaNumber.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   322
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   323
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   324
    exponent > 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   325
        ^ mantissa * (2 raisedTo:exponent)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   326
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   327
    ^ mantissa // (2 raisedTo:exponent negated)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   328
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   329
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   330
     (self new exponent:0 mantissa:100) asInteger 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   331
     (self new exponent:1 mantissa:100) asInteger 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   332
     (self new exponent:-1 mantissa:100) asInteger 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   333
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   334
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   335
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   336
asLargeFloat
21803
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
   337
    "return a large float with same value - that's me"
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   338
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   339
    ^ self
21803
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
   340
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
   341
    "Modified (comment): / 12-06-2017 / 20:56:44 / cg"
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   342
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   343
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   344
asTrueFraction
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   345
    "Answer a fraction or integer that EXACTLY represents self."
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   346
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   347
    exponent = 0 ifTrue: [ ^ mantissa].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   348
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   349
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   350
        "/ INF or NAN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   351
        ^ self class
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   352
            raise:#conversionErrorSignal
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   353
            receiver:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   354
            selector:#asTrueFraction
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   355
            arguments:#()
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   356
            errorString:'Cannot represent non-finite float as fraction'.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   357
"/        ^ self asMetaNumber.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   358
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   359
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   360
    exponent > 0 ifTrue: [
7552
4e9947615379 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7550
diff changeset
   361
        ^ mantissa bitShift:exponent 
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   362
    ].
7552
4e9947615379 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7550
diff changeset
   363
    ^ Fraction
4e9947615379 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7550
diff changeset
   364
        numerator: mantissa
4e9947615379 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7550
diff changeset
   365
        denominator: (1 bitShift:exponent negated) 
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   366
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   367
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   368
     0.3 asFloat asTrueFraction   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   369
     0.3 asShortFloat asTrueFraction  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   370
     0.3 asLongFloat asTrueFraction   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   371
     0.3 asLargeFloat asTrueFraction   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   372
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   373
     1 asLargeFloat asTrueFraction     
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   374
     2 asLargeFloat asTrueFraction     
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   375
     0.5 asLargeFloat asTrueFraction     
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   376
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   377
     0.25 asLargeFloat asTrueFraction     
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   378
     -0.25 asLargeFloat asTrueFraction    
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   379
     0.125 asLargeFloat asTrueFraction    
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   380
     -0.125 asLargeFloat asTrueFraction    
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   381
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   382
     1.25 asLargeFloat asTrueFraction       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   383
     3e37 asLargeFloat asTrueFraction     
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   384
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   385
     LargeFloat NaN asTrueFraction               -> error
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   386
     LargeFloat infinity asTrueFraction          -> error
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   387
     LargeFloat negativeInfinity asTrueFraction  -> error
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   388
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   389
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   390
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   391
coerce:aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   392
    "return the argument as a LargeFloat"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   393
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   394
    ^ aNumber asLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   395
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   396
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   397
generality
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   398
    "return the generality value - see ArithmeticValue>>retry:coercing:"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   399
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   400
    ^ 100
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   401
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   402
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   403
!LargeFloat methodsFor:'comparing'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   404
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   405
< aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   406
    "return true, if the argument is greater"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   407
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   408
    ^ aNumber lessFromLargeFloat:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   409
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   410
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   411
= aNumber
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   412
    "return true, if the argument is equal in value"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   413
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   414
    ^ aNumber equalFromLargeFloat:self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   415
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   416
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   417
     LargeFloat unity = LargeFloat zero  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   418
     LargeFloat unity = LargeFloat unity 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   419
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   420
     LargeFloat unity = nil            
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   421
     LargeFloat unity ~= nil            
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   422
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   423
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   424
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   425
hash
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   426
    "return a number for hashing; redefined, since floats compare
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   427
     by numeric value (i.e. 3.0 = 3), therefore 3.0 hash must be the same
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   428
     as 3 hash."
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   429
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   430
    exponent == 0 ifTrue:[^ mantissa hash].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   431
    exponent < 64 ifTrue:[^ (mantissa bitShift:exponent) hash ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   432
    ^ mantissa hash bitXor:exponent hash
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   433
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   434
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   435
     LargeFloat unity hash
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   436
     LargeFloat zero hash
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   437
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   438
     3 hash       
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   439
     3.0 hash
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   440
     3.1 hash  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   441
     3.14159 hash  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   442
     31.4159 hash 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   443
     3.141591 hash 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   444
     1.234567890123456 hash  
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   445
     1.234567890123457 hash   
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   446
     Set withAll:#(3 3.0 99 99.0 3.1415)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   447
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   448
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   449
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   450
!LargeFloat methodsFor:'double dispatching'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   451
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   452
differenceFromLargeFloat:aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   453
    |otherExponent otherMantissa e m|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   454
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   455
    otherExponent := aLargeFloat exponent.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   456
    otherMantissa := aLargeFloat mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   457
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   458
    otherMantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   459
        otherExponent = 0 ifTrue:[^ self negated].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   460
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   461
        aLargeFloat isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   462
        self isFinite ifTrue:[^ aLargeFloat].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   463
        aLargeFloat sign ~~ self sign ifTrue:[^ self negated].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   464
        ^ NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   465
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   466
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   467
        exponent = 0 ifTrue:[^ aLargeFloat].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   468
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   469
        self isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   470
        ^ self negated
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   471
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   472
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   473
    otherExponent = exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   474
        m := otherMantissa - mantissa. 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   475
        e := exponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   476
    ] ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   477
        otherExponent> exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   478
            m := (otherMantissa bitShift:(otherExponent-exponent)) - mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   479
            e := exponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   480
        ] ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   481
            m := otherMantissa - (mantissa bitShift:(exponent-otherExponent)).
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   482
            e := otherExponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   483
        ]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   484
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   485
    ^ self class
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   486
        mantissa:m 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   487
        exponent:e
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   488
        precision:(self precision min:aLargeFloat precision)
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   489
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   490
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   491
equalFromLargeFloat:aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   492
    aLargeFloat exponent = exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   493
        ^ aLargeFloat mantissa = mantissa
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   494
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   495
    "assuming normalized numbers, they cannot be equal then"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   496
    ^ false
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   497
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   498
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   499
lessFromLargeFloat:aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   500
    |otherExponent otherMantissa|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   501
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   502
    otherExponent := aLargeFloat exponent.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   503
    otherMantissa := aLargeFloat mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   504
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   505
    otherExponent > exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   506
        ^ otherMantissa < (mantissa bitShift:(otherExponent-exponent))
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   507
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   508
    otherExponent < exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   509
        ^ (otherMantissa bitShift:(exponent-otherExponent)) < mantissa
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   510
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   511
    ^ otherMantissa < mantissa
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   512
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   513
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   514
productFromLargeFloat:aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   515
    |otherMantissa otherExponent|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   516
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   517
    otherMantissa := aLargeFloat mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   518
    otherExponent := aLargeFloat exponent.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   519
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   520
    otherMantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   521
        otherExponent ~= 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   522
            "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   523
            aLargeFloat isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   524
            self negative ifTrue:[^ aLargeFloat negated].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   525
            ^ aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   526
        ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   527
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   528
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   529
        exponent = 0 ifTrue:[^ self].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   530
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   531
        self isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   532
        aLargeFloat negative ifTrue:[^ self negated].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   533
        ^ self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   534
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   535
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   536
    ^ self class
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   537
        mantissa:(mantissa * otherMantissa) 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   538
        exponent:(exponent + otherExponent)
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   539
        precision:(self precision min:aLargeFloat precision)
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   540
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   541
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   542
quotientFromLargeFloat:aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   543
    "Return the quotient of the argument, aLargeFloat and the receiver.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   544
     Sent when aLargeFloat does not know how to divide by the receiver."
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   545
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   546
    |otherMantissa otherExponent q|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   547
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   548
    otherMantissa := aLargeFloat mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   549
    otherExponent := aLargeFloat exponent.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   550
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   551
    otherMantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   552
        otherExponent = 0 ifTrue:[^ aLargeFloat].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   553
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   554
        aLargeFloat isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   555
        self negative ifTrue:[^ aLargeFloat negated].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   556
        ^ aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   557
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   558
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   559
        exponent = 0 ifTrue:[^ self].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   560
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   561
        self isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   562
        aLargeFloat negative ifTrue:[^ self negated].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   563
        ^ self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   564
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   565
    q := (otherMantissa / mantissa).
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   566
    q isInteger ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   567
        self halt.    
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   568
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   569
    ^ self class
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   570
        mantissa:q 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   571
        exponent:(otherExponent - exponent)
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   572
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   573
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   574
sumFromLargeFloat:aLargeFloat
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   575
    |otherExponent otherMantissa e m|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   576
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   577
    otherExponent := aLargeFloat exponent.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   578
    otherMantissa := aLargeFloat mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   579
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   580
    otherMantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   581
        otherExponent = 0 ifTrue:[^ self].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   582
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   583
        aLargeFloat isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   584
        self isFinite ifTrue:[^ aLargeFloat].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   585
        aLargeFloat sign == self sign ifTrue:[^ aLargeFloat].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   586
        ^ NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   587
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   588
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   589
        exponent = 0 ifTrue:[^ aLargeFloat].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   590
        "/ INF or NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   591
        self isNaN ifTrue:[^ NaN].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   592
        ^ self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   593
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   594
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   595
    otherExponent = exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   596
        m := otherMantissa + mantissa. 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   597
        e := exponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   598
    ] ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   599
        otherExponent> exponent ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   600
            m := (otherMantissa bitShift:(otherExponent-exponent)) + mantissa.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   601
            e := exponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   602
        ] ifFalse:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   603
            m := otherMantissa + (mantissa bitShift:(exponent-otherExponent)).
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   604
            e := otherExponent
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   605
        ]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   606
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   607
    ^ self class
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   608
        mantissa:m 
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   609
        exponent:e
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   610
        precision:(self precision min:aLargeFloat precision)
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   611
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   612
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   613
!LargeFloat methodsFor:'printing'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   614
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   615
printOn:aStream
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   616
    exponent == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   617
        mantissa printOn:aStream.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   618
        aStream nextPutAll:'.0'.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   619
        ^ self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   620
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   621
    mantissa == 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   622
        self == NaN ifTrue:[ aStream nextPutAll:'NAN'. ^ self ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   623
        self == NegativeInfinity ifTrue:[ aStream nextPutAll:'-INF'. ^ self].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   624
        self == PositiveInfinity ifTrue:[ aStream nextPutAll:'INF'. ^ self].
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   625
        self error:'invalid largeFloat' mayProceed:true.
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   626
        aStream nextPutAll:'Invalid'. ^ self.
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   627
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   628
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   629
    exponent > 0 ifTrue:[
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   630
self halt.
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   631
        (mantissa bitShift:exponent) printOn:aStream.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   632
        aStream nextPutAll:'.0'.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   633
        ^ self
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   634
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   635
    ((mantissa / (1 bitShift:exponent negated)) asFixedPoint:6) printOn:aStream.
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   636
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   637
    "
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   638
    
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   639
    "
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   640
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   641
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   642
!LargeFloat methodsFor:'private'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   643
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   644
mantissa:mantissaArg exponent:exponentArg  
7546
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   645
    "set instance variables.
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   646
     Notice, that the floats value is m * 2^e"
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   647
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   648
    exponent := exponentArg.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   649
    mantissa := mantissaArg.
7550
1c2970e4f2ea still not perfect
Claus Gittinger <cg@exept.de>
parents: 7547
diff changeset
   650
    precision := Infinity positive.
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   651
    self normalize.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   652
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   653
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   654
mantissa:mantissaArg exponent:exponentArg precision:precisionArg  
7546
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   655
    "set instance variables.
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   656
     Notice, that the floats value is m * 2^e"
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   657
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   658
    exponent := exponentArg.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   659
    mantissa := mantissaArg.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   660
    precision := precisionArg.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   661
    self normalize
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   662
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   663
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   664
normalize
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   665
    "adjust m & e such that m is the smallest possible 
7546
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   666
     (i.e. has no least significant zero bit).
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   667
     Notice, that the floats value is m * 2^e"
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   668
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   669
    |shift|
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   670
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   671
    shift := mantissa lowBit - 1.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   672
    shift > 0 ifTrue:[
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   673
        mantissa := mantissa bitShift:shift negated.
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   674
        exponent := exponent + shift
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   675
    ].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   676
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   677
    "
7546
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   678
     self mantissa:1 exponent:0
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   679
     self mantissa:2 exponent:0
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   680
     self mantissa:4 exponent:0  
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   681
     self mantissa:8 exponent:0  
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   682
     self mantissa:10 exponent:-1
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   683
     self mantissa:10 exponent:0 
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   684
     self mantissa:10 exponent:1 
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   685
    "
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   686
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   687
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   688
!LargeFloat methodsFor:'queries'!
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   689
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   690
epsilon
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   691
   "answer the radix of a LargeFloats exponent"
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   692
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   693
    |p|
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   694
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   695
    p := precision.
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   696
    p isFinite ifTrue:[
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   697
        ^ self class radix asFloat raisedTo:(1 - p)
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   698
    ].
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   699
    "/ mhmh - what should we use here ???
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   700
    ^ LongFloat epsilon
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   701
! !
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 7552
diff changeset
   702
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   703
!LargeFloat methodsFor:'testing'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   704
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   705
isFinite
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   706
    ^ mantissa ~= 0 or:[exponent = 0]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   707
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   708
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   709
isInfinite
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   710
    ^ mantissa = 0 and:[exponent ~= 0]
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   711
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   712
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   713
isNaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   714
    ^ self == NaN
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   715
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   716
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   717
isZero
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   718
    ^ self == Zero
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   719
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   720
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   721
negative
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   722
    "return true if the receiver is negative"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   723
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   724
    mantissa == 0 ifTrue:[ ^ exponent negative].
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   725
    ^ mantissa negative
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   726
!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   727
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   728
sign
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   729
    "return the sign of the receiver"
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   730
7546
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   731
    mantissa == 0 ifTrue:[ 
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   732
        "special value for infinites"
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   733
        ^ exponent sign
af752ee13420 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 7459
diff changeset
   734
    ].
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   735
    ^ mantissa sign
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   736
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   737
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   738
!LargeFloat class methodsFor:'documentation'!
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   739
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   740
version
21803
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
   741
    ^ '$Header$'
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   742
! !
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   743
21803
63325b999dbf #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 8634
diff changeset
   744
7445
be414e075c9a initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   745
LargeFloat initialize!