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