IEEEFloat.st
changeset 5278 f83cbbc43aad
child 5324 0867b8fdd273
equal deleted inserted replaced
5277:dc8d7dd2d811 5278:f83cbbc43aad
       
     1 "{ Package: 'stx:libbasic2' }"
       
     2 
       
     3 "{ NameSpace: Smalltalk }"
       
     4 
       
     5 LimitedPrecisionReal variableByteSubclass:#IEEEFloat
       
     6 	instanceVariableNames:'exponentSize'
       
     7 	classVariableNames:''
       
     8 	poolDictionaries:''
       
     9 	category:'Magnitude-Numbers'
       
    10 !
       
    11 
       
    12 !IEEEFloat class methodsFor:'documentation'!
       
    13 
       
    14 documentation
       
    15 "
       
    16     Unfinished, ongoing work
       
    17 
       
    18     soft float emulation for arbitrary IEEE float formats.
       
    19     This is very very slow and should only be used when importing 
       
    20     funny sized floating point numbers (such as float24 or float8) from
       
    21     external sources, or to simulate computations on otherwise unsupported floating pnt numbers.
       
    22 "
       
    23 ! !
       
    24 
       
    25 !IEEEFloat class methodsFor:'instance creation'!
       
    26 
       
    27 size:numBits exponentSize:exponentSize
       
    28     ^ (self basicNew:(numBits // 8)) exponentSize:exponentSize
       
    29 
       
    30     "
       
    31      self size:256 exponentSize:19
       
    32     "
       
    33 !
       
    34 
       
    35 size:numBits exponentSize:exponentSize fromFloat:aFloat
       
    36     ^ ((self basicNew:(numBits // 8)) exponentSize:exponentSize) setValueFromFloat:aFloat
       
    37 
       
    38     "
       
    39      self size:256 exponentSize:19 fromFloat:1.0
       
    40      self size:256 exponentSize:19 fromFloat:2.0
       
    41     "
       
    42 !
       
    43 
       
    44 size:numBits exponentSize:exponentSize fromInteger:anInteger
       
    45     ^ ((self basicNew:(numBits // 8)) exponentSize:exponentSize) setValueFromInteger:anInteger
       
    46 
       
    47     "
       
    48      self size:256 exponentSize:19 fromInteger:1
       
    49      self size:256 exponentSize:19 fromInteger:2
       
    50     "
       
    51 ! !
       
    52 
       
    53 !IEEEFloat class methodsFor:'queries'!
       
    54 
       
    55 isAbstract
       
    56     "Return if this class is an abstract class.
       
    57      True is returned here for myself only; false for subclasses.
       
    58      Abstract subclasses must redefine this again."
       
    59 
       
    60     ^ self == IEEEFloat.
       
    61 ! !
       
    62 
       
    63 !IEEEFloat methodsFor:'accessing'!
       
    64 
       
    65 exponentSize
       
    66     ^ exponentSize
       
    67 !
       
    68 
       
    69 exponentSize:something
       
    70     exponentSize := something.
       
    71 !
       
    72 
       
    73 setValueFromInteger:intValue
       
    74     "/ how many bits are there, in this int
       
    75     |absValue myNumBits numBitsInNumber shift|
       
    76 
       
    77     absValue := intValue abs. 
       
    78     numBitsInNumber := absValue highBit.
       
    79     myNumBits := (self basicSize * 8) - 1 "sign" - exponentSize.
       
    80     shift := myNumBits - numBitsInNumber. 
       
    81     numBitsInNumber > myNumBits ifTrue:[
       
    82         self halt.
       
    83     ] ifFalse:[
       
    84         "/ number:
       
    85         "/    1xxxxxxx...xxxxx
       
    86         "/ myRep:
       
    87         "/    seee...eeexxxxxxxxxx
       
    88         absValue digitLength to:1 by:-1 do:[:byteIndex |
       
    89             
       
    90         ].
       
    91     ].
       
    92 
       
    93     "/ cut off some bits
       
    94 
       
    95     "Float numBitsInExponent
       
    96      self size:16 exponentSize:4 fromInteger:1
       
    97      self size:32 exponentSize:11 fromInteger:1
       
    98 
       
    99      self size:256 exponentSize:19 fromInteger:1
       
   100      self size:256 exponentSize:19 fromInteger:2
       
   101     "
       
   102 ! !
       
   103 
       
   104 !IEEEFloat class methodsFor:'documentation'!
       
   105 
       
   106 version_CVS
       
   107     ^ '$Header$'
       
   108 ! !
       
   109