Number.st
author Claus Gittinger <cg@exept.de>
Wed, 21 Jun 2017 14:13:23 +0200
changeset 21888 f7b6885f1cec
parent 21871 2e74148f065b
child 21894 194db181170d
permissions -rw-r--r--
#DOCUMENTATION by cg class: Number comment/format in: #exp_withAccuracy:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     1
"
5
67342904af11 *** empty log message ***
claus
parents: 3
diff changeset
     2
 COPYRIGHT (c) 1988 by Claus Gittinger
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
     3
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
     4
a27a279701f8 Initial revision
claus
parents:
diff changeset
     5
 This software is furnished under a license and may be used
a27a279701f8 Initial revision
claus
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
a27a279701f8 Initial revision
claus
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
a27a279701f8 Initial revision
claus
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
a27a279701f8 Initial revision
claus
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
a27a279701f8 Initial revision
claus
parents:
diff changeset
    10
 hereby transferred.
a27a279701f8 Initial revision
claus
parents:
diff changeset
    11
"
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
    12
"{ Package: 'stx:libbasic' }"
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
    13
17469
17e4b64a023b class: Number
Claus Gittinger <cg@exept.de>
parents: 17224
diff changeset
    14
"{ NameSpace: Smalltalk }"
17e4b64a023b class: Number
Claus Gittinger <cg@exept.de>
parents: 17224
diff changeset
    15
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    16
ArithmeticValue subclass:#Number
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
    17
	instanceVariableNames:''
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
    18
	classVariableNames:'DecimalPointCharacterForPrinting DecimalPointCharactersForReading
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
    19
		DefaultDisplayRadix'
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
    20
	poolDictionaries:''
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
    21
	category:'Magnitude-Numbers'
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    22
!
a27a279701f8 Initial revision
claus
parents:
diff changeset
    23
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
    24
!Number class methodsFor:'documentation'!
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    25
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    26
copyright
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    27
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    28
 COPYRIGHT (c) 1988 by Claus Gittinger
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    29
	      All Rights Reserved
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    30
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    31
 This software is furnished under a license and may be used
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    32
 only in accordance with the terms of that license and with the
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    33
 inclusion of the above copyright notice.   This software may not
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    34
 be provided or otherwise made available to, or used by, any
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    35
 other person.  No title to or ownership of the software is
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    36
 hereby transferred.
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    37
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    38
!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    39
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    40
documentation
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    41
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    42
    abstract superclass for all kinds of numbers
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1245
diff changeset
    43
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
    44
    [class variables:]
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    45
	DecimalPointCharacterForPrinting          <Character>                     used when printing
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    46
	DecimalPointCharactersForReading          <Collection of Character>       accepted as decimalPointChars when reading
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    47
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    48
	DefaultDisplayRadix     the radix in which integers present their
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    49
				displayString (which is used in inspectors)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    50
				If you are to look at many hex numbers, bitmasks
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    51
				etc. you may set this to 2 or 16.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    52
				(avoids typing printStringRadix:.. all the time
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    53
				 - I know - I am lazy ;-). Default is 10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    54
1295
83f594f05c52 documentation
Claus Gittinger <cg@exept.de>
parents: 1245
diff changeset
    55
    [author:]
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    56
	Claus Gittinger
1628
da30f2f41db7 comment
Claus Gittinger <cg@exept.de>
parents: 1557
diff changeset
    57
da30f2f41db7 comment
Claus Gittinger <cg@exept.de>
parents: 1557
diff changeset
    58
    [see also:]
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    59
	Integer LargeInteger SmallInteger
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    60
	LimitedPrecisionReal Float ShortFloat
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
    61
	Fraction FixedPoint
88
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    62
"
81dacba7a63a *** empty log message ***
claus
parents: 56
diff changeset
    63
! !
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    64
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
    65
!Number class methodsFor:'instance creation'!
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
    66
21871
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    67
coerce:aNumber
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    68
    "convert the argument aNumber into an instance of the receiver (class) and return it."
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    69
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    70
    self == Number ifTrue:[
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    71
        self assert:(aNumber isNumber).
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    72
        ^ aNumber
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    73
    ].
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    74
    ^ super coerce:aNumber
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    75
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    76
    "Created: / 21-06-2017 / 08:58:38 / cg"
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    77
!
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
    78
11944
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    79
fastFromString:aString
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    80
    "return the next Float, Integer or ShortFloat from the string.
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    81
     No spaces are skipped.
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    82
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    83
     This is a specially tuned entry (using a low-level C-call), which
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    84
     returns garbage if the argument string is not a valid float number.
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    85
     It has been added to allow high speed string decomposition into numbers,
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    86
     especially for mass-data."
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    87
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    88
    ^ self fastFromString:aString at:1
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    89
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    90
    "
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    91
     Float fromString:'12345.0'
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    92
     Float fastFromString:'12345.0'
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    93
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    94
     Integer fromString:'12345'
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    95
     Integer fastFromString:'12345'
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    96
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    97
     should be roughly 10times faster than the general method:
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    98
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
    99
     Time millisecondsToRun:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   100
	100000 timesRepeat:[ Float fromString:'12345.0' ]
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   101
     ].
11944
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   102
     Time millisecondsToRun:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   103
	100000 timesRepeat:[ Float fastFromString:'12345.0' ]
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   104
     ].
11944
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   105
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   106
     Time millisecondsToRun:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   107
	100000 timesRepeat:[ Integer fromString:'12345' ]
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   108
     ].
11944
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   109
     Time millisecondsToRun:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   110
	100000 timesRepeat:[ Integer fastFromString:'12345' ]
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   111
     ].
11944
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   112
    "
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   113
!
6fb9813181cc *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 11770
diff changeset
   114
21871
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   115
fromNumber:aNumber
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   116
    "return aNumber coerced to myself"
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   117
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   118
    self isAbstract ifTrue:[^ aNumber]. 
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   119
    ^ self coerce:aNumber
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   120
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   121
    "Created: / 21-06-2017 / 08:57:00 / cg"
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   122
!
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   123
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   124
fromString:aString
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   125
    "return a number by reading from aString.
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   126
     In contrast to readFrom:, no garbage is allowed after the number.
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   127
     I.e. the string must contain exactly one valid number (with optional separators around)"
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   128
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   129
    ^ self
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   130
	fromString:aString
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   131
	decimalPointCharacters:(self decimalPointCharactersForReading)
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   132
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   133
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   134
     Number fromString:'12345'
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   135
     Number fromString:'abc'
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   136
     Number fromString:'1abc'   -> raises an error
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   137
     Number readFrom:'1abc'     -> reads a 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   138
     Number readFrom:'10/2'     -> reads a 10
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   139
     Number fromString:'10/2'   -> raises an error
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   140
     Number fromString:'(1/2)'  -> reads a fraction
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   141
     Number readFrom:'(1/2)'    -> reads a fraction
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   142
     Number readFrom:'(10/2)'   -> reads a 5
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   143
     '12345' asNumber
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   144
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   145
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   146
    "Modified: / 3.8.1998 / 20:05:11 / cg"
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   147
!
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   148
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   149
fromString:aString decimalPointCharacters:decimalPointCharacters
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   150
    "return a number by reading from aString.
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   151
     In contrast to readFrom:, no garbage is allowed after the number.
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   152
     I.e. the string must contain exactly one valid number (with optional separators around)"
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   153
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   154
    |s num|
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   155
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   156
    s := aString readStream.
18320
886e94df740b class: Number
Stefan Vogel <sv@exept.de>
parents: 17686
diff changeset
   157
    num := self readFrom:s decimalPointCharacters:decimalPointCharacters onError:[^ ConversionError raiseRequestErrorString:' - invalid number'].
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   158
    s atEnd ifFalse:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   159
	s skipSeparators.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   160
	s atEnd ifFalse:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   161
	    ^ ConversionError raiseRequestErrorString:' - garbage at end of number'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   162
	].
17056
dfbf6a7fd352 class: Number
Claus Gittinger <cg@exept.de>
parents: 16656
diff changeset
   163
    ].
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   164
    ^ num.
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   165
3716
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   166
    "
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   167
     Number fromString:'12345'
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   168
     Number fromString:'abc'
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   169
     Number fromString:'1abc'
3716
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   170
     '12345' asNumber
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   171
    "
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   172
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   173
    "Modified: / 3.8.1998 / 20:05:11 / cg"
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   174
!
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   175
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   176
fromString:aString decimalPointCharacters:decimalPointCharacters onError:exceptionBlock
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   177
    "return a number by reading from aString.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   178
     In contrast to readFrom:, no garbage is allowed after the number.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   179
     I.e. the string must contain exactly one valid number (with optional separators around)"
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   180
21142
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   181
    |s num|
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   182
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   183
    s := aString readStream.
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   184
    num := self readFrom:s decimalPointCharacters:decimalPointCharacters onError:[^ exceptionBlock value].
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   185
    s atEnd ifFalse:[
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   186
        s skipSeparators.
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   187
        s atEnd ifFalse:[
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   188
            ^ exceptionBlock value "/ - garbage at end of number'
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   189
        ].
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   190
    ].
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   191
    ^ num.
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   192
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   193
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   194
     Number fromString:'12345' onError:0
21142
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   195
     Number fromString:'12,345' decimalPointCharacters:',' onError:0
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   196
     Number fromString:'12,345' decimalPointCharacters:',' onError:0
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   197
     Number fromString:'fooBarBaz' onError:0
21142
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   198
     Number fromString:'123fooBarBaz' onError:0
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   199
     Number fromString:'123,fooBarBaz' decimalPointCharacters:',' onError:0
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   200
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   201
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   202
    "Modified: / 3.8.1998 / 20:05:34 / cg"
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   203
!
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   204
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   205
fromString:aString onError:exceptionBlock
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   206
    "return a number by reading from aString.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   207
     In contrast to readFrom:, no garbage is allowed after the number.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   208
     I.e. the string must contain exactly one valid number (with optional separators around)"
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   209
21142
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   210
    ^ self fromString:aString decimalPointCharacters:(self decimalPointCharactersForReading) onError:exceptionBlock
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   211
3716
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   212
    "
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   213
     Number fromString:'12345' onError:0
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   214
     Number fromString:'fooBarBaz' onError:0
21142
d9692dfa814f #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21105
diff changeset
   215
     Number fromString:'123fooBarBaz' onError:0
3716
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   216
    "
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   217
e7904bd50d9d comment
Claus Gittinger <cg@exept.de>
parents: 3634
diff changeset
   218
    "Modified: / 3.8.1998 / 20:05:34 / cg"
3060
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   219
!
0faf242e1142 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 2894
diff changeset
   220
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   221
readFrom:aStringOrStream decimalPointCharacters:decimalPointCharacters
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   222
    "return the next Number from the (character-)stream aStream;
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   223
     skipping all whitespace first.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   224
     Return the value of exceptionBlock, if no number can be read.
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   225
     This method is less strict than the smalltalk number reader; it
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   226
     allows for prefixed + and also allows missing fractional part after eE.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   227
     It also allows garbage after the number - i.e. it reads what it can.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   228
     See #fromString: , which is more strict and does not allow garbage at the end."
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   229
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   230
    ^ self
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   231
	readFrom:aStringOrStream
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   232
	decimalPointCharacters:decimalPointCharacters
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   233
	onError:[self error:'conversion error for: ' , self name]
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   234
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   235
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   236
     Number readFrom:'123.456' decimalPointCharacters:'.'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   237
     Number readFrom:'123,456' decimalPointCharacters:'.,'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   238
     Number readFrom:'123,456' decimalPointCharacters:'.'
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   239
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   240
!
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   241
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   242
readFrom:aStringOrStream decimalPointCharacters:decimalPointCharacters onError:exceptionBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   243
    "return the next Number from the (character-)stream aStream;
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   244
     skipping all whitespace first.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   245
     Return the value of exceptionBlock, if no number can be read.
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   246
     This method is less strict than the smalltalk number reader; it
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   247
     allows for prefixed + and also allows missing fractional part after eE.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   248
     It also allows garbage after the number - i.e. it reads what it can.
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   249
     See #fromString: , which is more strict and does not allow garbage at the end.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   250
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   251
     Notice (see examples below): 
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   252
        if sent to Number, it will decide which type of number to return (depending on the exponent character);
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   253
        if sent to a concrete number-class, an instance of that class will be returned (independent of the exponent character)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   254
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   255
6632
65014fd967d9 Avoid creation of block in #readFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 6584
diff changeset
   256
    ^ [
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   257
        |value intValue mantissaAndScale scale decimalMantissa str
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   258
         nextChar radix sign signExp exp numerator denom expChar|
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   259
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   260
        str := aStringOrStream readStream.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   261
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   262
        nextChar := str skipSeparators.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   263
        nextChar isNil ifTrue:[^ exceptionBlock value].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   264
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   265
        (nextChar == $-) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   266
            sign := -1.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   267
            str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   268
            nextChar := str peekOrNil
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   269
        ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   270
            sign := 1.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   271
            (nextChar == $+) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   272
                str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   273
                nextChar := str peekOrNil
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   274
            ]
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   275
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   276
        nextChar == $( ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   277
            "maybe a Fraction e.g. (1/3)"
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   278
            str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   279
            numerator := Integer readFrom:str onError:[^ exceptionBlock value].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   280
            str skipSeparators.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   281
            nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   282
            nextChar == $/ ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   283
                str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   284
                denom := Integer readFrom:str onError:[^ exceptionBlock value].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   285
                str skipSeparators.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   286
                nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   287
            ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   288
            nextChar == $) ifFalse:[^ exceptionBlock value].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   289
            str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   290
            value := Fraction numerator:numerator denominator:denom.
21871
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   291
            value := value * sign.
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   292
            (self ~~ Number and:[self ~~ Fraction]) ifTrue:[
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   293
                value := self coerce:value.
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   294
            ].    
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   295
            ^ value
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   296
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   297
        nextChar isNil ifTrue:[^ exceptionBlock value].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   298
        (nextChar isDigit or:[(decimalPointCharacters includes:nextChar)]) ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   299
            ^ exceptionBlock value.
569
7134eb78cf48 readFrom:onError: can now also read from a string
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   300
"/          value := super readFrom:str.
15197
a78cec832ef3 class: Number
Claus Gittinger <cg@exept.de>
parents: 15127
diff changeset
   301
"/          sign == -1 ifTrue:[value := value negated].
339
claus
parents: 329
diff changeset
   302
"/          ^ value
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   303
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   304
        (decimalPointCharacters includes:nextChar) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   305
            radix := 10.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   306
            value := 0.0.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   307
            intValue := 0.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   308
        ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   309
            value := Integer readFrom:str radix:10.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   310
            nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   311
            ((nextChar == $r) or:[ nextChar == $R]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   312
                str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   313
                radix := value.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   314
                value := Integer readFrom:str radix:radix.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   315
                nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   316
            ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   317
                radix := 10
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   318
            ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   319
            intValue := value.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   320
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   321
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   322
        (self == Integer or:[self inheritsFrom:Integer]) ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   323
            (decimalPointCharacters includes:nextChar) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   324
                str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   325
                nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   326
                decimalMantissa := 0.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   327
                (nextChar notNil and:[nextChar isDigitRadix:radix]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   328
                    |mantissa|
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   329
                    mantissaAndScale := self readMantissaAndScaleFrom:str radix:radix.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   330
                    mantissa := mantissaAndScale first.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   331
                    value := (mantissa coerce:value) + mantissa.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   332
                    nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   333
                ]
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   334
            ].
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   335
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   336
            ('eEdDqQfF' includes:nextChar) ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   337
                expChar := nextChar.
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   338
                str next.
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   339
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   340
                nextChar := str peekOrNil.
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   341
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   342
                signExp := 1.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   343
                (nextChar == $+) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   344
                    str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   345
                    nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   346
                ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   347
                    (nextChar == $-) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   348
                        str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   349
                        nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   350
                        signExp := -1
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   351
                    ]
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   352
                ].
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   353
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   354
                "/ if I am abstract (i.e. I am Number or LPReal),
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   355
                "/ let the exponent-character decide what kind of float we get:
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   356
                "/      qQ   -> LongFloat
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   357
                "/      eEdD -> Float      (which is iee-double)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   358
                "/      fF   -> ShortFloat (which is iee-float)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   359
                
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   360
                self isAbstract ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   361
                    ('qQ' includes:expChar) ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   362
                        value := value asLongFloat.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   363
                    ] ifFalse:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   364
                        ('fF' includes:expChar) ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   365
                            value := value asShortFloat.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   366
                        ] ifFalse:[    
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   367
                            "/ maybe in the far future we might create shortfloats when seeing eE,
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   368
                            "/ and only produce doubles on dD.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   369
                            "/ (for now, always create Doubles for Dolphin, Squeak etc. compatibility)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   370
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   371
                            false "('eE' includes:expChar)" ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   372
                                value := value asShortFloat
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   373
                            ] ifFalse:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   374
                                value := value asFloat.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   375
                            ].    
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   376
                        ].    
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   377
                    ].
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   378
                ] ifFalse:[
21871
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   379
                    value := self coerce:value.
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   380
                ].
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   381
                
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   382
                (nextChar notNil and:[(nextChar isDigitRadix:radix)]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   383
                    exp := (Integer readFrom:str radix:radix) * signExp.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   384
                    value := value * ((value class unity * 10.0) raisedToInteger:exp)
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   385
                ]
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   386
            ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   387
                ('sS' includes:nextChar) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   388
                    str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   389
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   390
                    nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   391
                    (nextChar notNil and:[ nextChar isDigit]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   392
                        scale := (Integer readFrom:str).
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   393
                    ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   394
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   395
                    mantissaAndScale isNil ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   396
                        value := intValue asFixedPoint:(scale ? 0).
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   397
                    ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   398
                        denom := 10 raisedTo:mantissaAndScale last.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   399
                        value := FixedPoint
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   400
                                    numerator:(intValue * denom) + (mantissaAndScale second)
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   401
                                    denominator:denom
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   402
                                    scale:(scale ? mantissaAndScale third).
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   403
                    ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   404
                ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   405
                    (self inheritsFrom:LimitedPrecisionReal) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   406
                        "when requesting a specific Float instance, coerce it.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   407
                         otherwise return a value without loosing precision"
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   408
                        value := self coerce:value.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   409
                    ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   410
                ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   411
            ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   412
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   413
        sign == -1 ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   414
            value := value negated
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   415
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   416
        value.
6632
65014fd967d9 Avoid creation of block in #readFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 6584
diff changeset
   417
    ] on:Error do:exceptionBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   418
329
claus
parents: 325
diff changeset
   419
    "
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   420
     Number readFrom:(ReadStream on:'54.32e-01') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   421
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   422
     Number readFrom:(ReadStream on:'12345') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   423
     Number readFrom:(ReadStream on:'12345.0') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   424
     
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   425
     Number readFrom:(ReadStream on:'12345.0f') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   426
     Number readFrom:(ReadStream on:'12345.0e') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   427
     Number readFrom:(ReadStream on:'12345.0q') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   428
     Number readFrom:(ReadStream on:'12345.0d') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   429
     Number readFrom:(ReadStream on:'12345.0s') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   430
     Number readFrom:(ReadStream on:'12345.01s') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   431
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   432
     Float readFrom:(ReadStream on:'12345') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   433
     
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   434
     Number readFrom:(ReadStream on:'12345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   435
     Number readFrom:(ReadStream on:'12345678901234567890.0')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   436
     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   437
     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   438
     Number readFrom:'16rAAAAFFFFAAAAFFFF'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   439
     Number readFrom:'0.000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   440
     '+00000123.45' asNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   441
     Number readFrom:'(1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   442
     Number readFrom:'(-1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   443
     Number readFrom:'(1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   444
     Number readFrom:'-(1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   445
     Number readFrom:'-(-1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   446
     Number readFrom:'(-1/3'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   447
     Number readFrom:'99s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   448
     Number readFrom:'99.00s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   449
     Number readFrom:'99.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   450
     Number readFrom:'.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   451
     Number readFrom:'.0000000q'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   452
     Number readFrom:'.0000000f'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   453
     Number readFrom:'.0000000e'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   454
     Number readFrom:'.0000000s1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   455
     Number readFrom:'.0000000q1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   456
     Number readFrom:'.0000000f1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   457
     Number readFrom:'.0000000e1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   458
     LongFloat readFrom:'.00000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   459
     Number readFrom:'.00000000000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   460
     Number readFrom:'.001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   461
     ShortFloat readFrom:'.001'
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   462
     Number readFrom:'123garbage'      -> returns 123
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   463
     Number fromString:'123garbage'    -> raises an error
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   464
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   465
     DecimalPointCharactersForReading := #( $. $, ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   466
     Number readFrom:'99,00'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   467
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   468
     DecimalPointCharactersForReading := #( $. ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   469
     Number readFrom:'99,00'
329
claus
parents: 325
diff changeset
   470
    "
569
7134eb78cf48 readFrom:onError: can now also read from a string
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   471
21871
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   472
    "Modified: / 21-06-2017 / 09:00:10 / cg"
296
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   473
!
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   474
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   475
readFrom:aStringOrStream onError:exceptionBlock
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   476
    "return the next Number from the (character-)stream aStream;
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   477
     skipping all whitespace first; return the value of exceptionBlock,
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   478
     if no number can be read.
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   479
     This method is less strict than the smalltalk number reader; it
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   480
     allows for prefixed + and also allows missing fractional part after eE.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   481
     It also allows garbage after the number - i.e. it reads what it can.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   482
     See #fromString: , which is more strict and does not allow garbage at the end."
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   483
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   484
    ^ self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   485
	readFrom:aStringOrStream
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   486
	decimalPointCharacters:(self decimalPointCharactersForReading)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   487
	onError:exceptionBlock
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   488
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   489
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   490
     Number readFrom:(ReadStream on:'54.32e-01')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   491
     Number readFrom:(ReadStream on:'12345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   492
     Number readFrom:(ReadStream on:'12345678901234567890.0')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   493
     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   494
     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   495
     Number readFrom:'16rAAAAFFFFAAAAFFFF'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   496
     Number readFrom:'0.000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   497
     '+00000123.45' asNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   498
     Number readFrom:'99s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   499
     Number readFrom:'99.00s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   500
     Number readFrom:'99.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   501
     Number readFrom:'.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   502
     Number readFrom:'.0000000q'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   503
     Number readFrom:'.0000000f'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   504
     Number readFrom:'.0000000e'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   505
     Number readFrom:'.0000000s1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   506
     Number readFrom:'.0000000q1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   507
     Number readFrom:'.0000000f1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   508
     Number readFrom:'.0000000e1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   509
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   510
     DecimalPointCharactersForReading := #( $. $, ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   511
     Number readFrom:'99,00'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   512
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   513
     DecimalPointCharactersForReading := #( $. ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   514
     Number readFrom:'99,00'
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   515
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   516
!
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   517
296
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   518
readSmalltalkSyntaxFrom:aStream
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   519
    "ST-80 compatibility (thanks to a note from alpha testers)
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   520
     read and return the next Number in smalltalk syntax from the
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   521
     (character-) aStream.
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   522
     Returns nil if aStream contains no valid number."
329
claus
parents: 325
diff changeset
   523
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   524
    ^ self readSmalltalkSyntaxFrom:aStream onError:nil.
296
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   525
329
claus
parents: 325
diff changeset
   526
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   527
     Number readSmalltalkSyntaxFrom:'99d'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   528
     Number readSmalltalkSyntaxFrom:'99.00d'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   529
     Number readSmalltalkSyntaxFrom:'54.32e-01'
15078
997a122ceeb5 class: Number
Stefan Vogel <sv@exept.de>
parents: 14495
diff changeset
   530
     Number readSmalltalkSyntaxFrom:'12345678901234567890'
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   531
     Number readSmalltalkSyntaxFrom:'16rAAAAFFFFAAAAFFFF'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   532
     Number readSmalltalkSyntaxFrom:'foobar'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   533
     Number readSmalltalkSyntaxFrom:'(1/10)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   534
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   535
     Number readSmalltalkSyntaxFrom:'(1/0)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   536
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   537
     Number readFrom:'(1/3)'
15078
997a122ceeb5 class: Number
Stefan Vogel <sv@exept.de>
parents: 14495
diff changeset
   538
     Number readFrom:'(-1/3)'
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   539
     Number readFrom:'-(1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   540
     Number readFrom:'(1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   541
     Number readFrom:'(-1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   542
     Number readFrom:'-(-1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   543
     Number readSmalltalkSyntaxFrom:'+00000123.45'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   544
     Number readFrom:'+00000123.45'
5013
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   545
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   546
     |s|
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   547
     s := ReadStream on:'2.'.
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   548
     Number readSmalltalkSyntaxFrom:s.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   549
     s next
5013
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   550
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   551
     |s|
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   552
     s := ReadStream on:'2.0.'.
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   553
     Number readSmalltalkSyntaxFrom:s.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   554
     s next
329
claus
parents: 325
diff changeset
   555
    "
3613
75629df7f224 fixed readSmalltalkSyntax (dont read behind number)
Claus Gittinger <cg@exept.de>
parents: 3394
diff changeset
   556
5013
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   557
    "Modified: / 19.11.1999 / 18:26:47 / cg"
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   558
!
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   559
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   560
readSmalltalkSyntaxFrom:aStream onError:errorValue
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   561
    "ST-80 compatibility (thanks to a note from alpha testers)
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   562
     read and return the next Number in smalltalk syntax from the
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   563
     (character-) aStream.
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   564
     Returns nil if aStream contains no valid number."
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   565
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   566
    |n|
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   567
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   568
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   569
	n := Scanner scanNumberFrom:aStream.
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   570
    ] on:Error do:[:ex|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   571
	n := nil
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   572
    ].
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   573
    n isNil ifTrue:[^ errorValue value].
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   574
    ^ n
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   575
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   576
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   577
     Number readSmalltalkSyntaxFrom:'foo' onError:123
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   578
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   579
! !
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   580
17686
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   581
!Number class methodsFor:'Compatibility-VW'!
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   582
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   583
readIntegerFrom:aStream radix:radix
21789
abf8de4b8720 #DOCUMENTATION by mawalch
mawalch
parents: 21634
diff changeset
   584
    "for VisualWorks compatibility"
17686
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   585
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   586
    ^ Integer readFrom:aStream radix:radix
21789
abf8de4b8720 #DOCUMENTATION by mawalch
mawalch
parents: 21634
diff changeset
   587
abf8de4b8720 #DOCUMENTATION by mawalch
mawalch
parents: 21634
diff changeset
   588
    "Modified (comment): / 08-06-2017 / 13:58:36 / mawalch"
17686
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   589
! !
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   590
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   591
!Number class methodsFor:'constants'!
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   592
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   593
e
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   594
    "return the closest approximation of the irrational number e"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   595
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   596
    ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   597
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   598
    "Modified: / 16-06-2017 / 11:04:49 / cg"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   599
!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   600
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   601
epsilon
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   602
    "return the maximum relative spacing of instances of mySelf
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   603
     (i.e. the value-delta of the least significant bit)"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   604
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   605
     ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   606
!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   607
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   608
epsilonForCloseTo
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   609
    "return the epsilon used in the closeTo: comparison.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   610
     (useful would be something like self epsilon or epsilon*10,
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   611
      but for Squeak compatibility.... - sigh)"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   612
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   613
    ^ 0.0001
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   614
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   615
    "
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   616
     Float epsilon
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   617
     ShortFloat epsilon
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   618
     Float epsilon10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   619
     ShortFloat epsilon10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   620
    "
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   621
!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   622
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   623
ln10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   624
    "return ln(10) in my representation (and accuracy)."
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   625
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   626
    ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   627
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   628
    "Created: / 16-06-2017 / 11:00:38 / cg"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   629
!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   630
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   631
pi
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   632
    "return Pi in my representation (and accuracy)."
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   633
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   634
    ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   635
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   636
    "Modified (format): / 16-06-2017 / 11:00:42 / cg"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   637
! !
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   638
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   639
!Number class methodsFor:'constants & defaults'!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   640
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   641
decimalPointCharacter
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   642
    "printed"
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   643
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   644
    <resource: #obsolete>
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   645
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   646
    ^ self decimalPointCharacterForPrinting
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   647
!
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   648
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   649
decimalPointCharacter:aCharacter
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   650
    "printed"
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   651
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   652
    <resource: #obsolete>
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   653
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   654
    self decimalPointCharacterForPrinting:aCharacter
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   655
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   656
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   657
     1.5 printString
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   658
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   659
     Number decimalPointCharacter:$,.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   660
     1.5 printString
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   661
     Number decimalPointCharacter:$..
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   662
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   663
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   664
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   665
decimalPointCharacterForPrinting
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   666
    "printed"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   667
16267
beef1cb9c801 class: Number
Claus Gittinger <cg@exept.de>
parents: 16070
diff changeset
   668
    ^ DecimalPointCharacterForPrinting ? $.
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   669
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   670
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   671
decimalPointCharacterForPrinting:aCharacter
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   672
    "printed"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   673
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   674
    DecimalPointCharacterForPrinting := aCharacter
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   675
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   676
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   677
     1.5 printString
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   678
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   679
     Number decimalPointCharacterForPrinting:$,.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   680
     1.5 printString
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   681
     Number decimalPointCharacterForPrinting:$..
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   682
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   683
!
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   684
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   685
decimalPointCharacters
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   686
    "accepted when converting from a string"
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   687
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   688
    <resource: #obsolete>
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   689
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   690
    ^ self decimalPointCharactersForReading
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   691
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   692
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   693
     1.5 printString
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   694
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   695
     Number decimalPointCharacters:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   696
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   697
     Number fromString:'1,5'.
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   698
     Number decimalPointCharacters:#( $. ).
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   699
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   700
!
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   701
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   702
decimalPointCharacters:aCollectionOfCharacters
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   703
    "accepted when converting from a string"
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   704
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   705
    <resource: #obsolete>
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   706
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   707
    self decimalPointCharactersForReading:aCollectionOfCharacters
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   708
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   709
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   710
     Number decimalPointCharacters:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   711
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   712
     Number fromString:'1,5'.
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   713
     Number decimalPointCharacters:#( $. ).
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   714
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   715
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   716
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   717
decimalPointCharactersForReading
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   718
    "default when converting from a string"
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   719
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   720
    "/ cg: changing the default leads to trouble in some
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   721
    "/ language processors (PrologScanner...)
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   722
    "/ PLEASE DO ONLY CHANGE THE DEFAULT BELOW FOR END-USER APPLICATIONS (if at all).
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   723
    "/ BETTER: pass the DecimalPointCharacterSet explicitly
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   724
    DecimalPointCharactersForReading isNil ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   725
	^ #( $. )
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   726
    ].
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   727
    ^ DecimalPointCharactersForReading
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   728
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   729
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   730
     1.5 printString
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   731
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   732
     Number decimalPointCharactersForReading:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   733
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   734
     Number fromString:'1,5'.
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   735
     Number decimalPointCharactersForReading:#( $. ).
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   736
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   737
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   738
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   739
decimalPointCharactersForReading:aCollectionOfCharacters
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   740
    "accepted when converting from a string"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   741
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   742
    DecimalPointCharactersForReading := aCollectionOfCharacters
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   743
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   744
    "
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   745
     Number decimalPointCharactersForReading:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   746
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   747
     Number fromString:'1,5'.
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   748
     Number decimalPointCharactersForReading:#( $. ).
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   749
    "
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   750
! !
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   751
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
   752
!Number class methodsFor:'error reporting'!
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   753
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   754
raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel arg:arg errorString:text
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   755
    "ST-80 compatible signal raising. Provided for PD numeric classes"
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   756
4558
94044dccefab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3995
diff changeset
   757
    <context: #return>
94044dccefab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3995
diff changeset
   758
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   759
    ^ self
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   760
	raise:aSignalSymbolOrErrorClass
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   761
	receiver:someNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   762
	selector:sel
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   763
	arguments:(Array with:arg)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   764
	errorString:text
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   765
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   766
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   767
     Number
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   768
	raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   769
	receiver:1.0
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   770
	selector:#sin
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   771
	arg:nil
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   772
	errorString:'foo bar test'
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   773
    "
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   774
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   775
    "Modified: / 16.11.2001 / 14:12:50 / cg"
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   776
!
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   777
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   778
raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel errorString:text
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   779
    "ST-80 compatible signal raising. Provided for PD numeric classes.
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   780
     aSignalSymbolOrErrorClass is either an Error-subclass, or
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   781
     the selector which is sent to myself, to retrieve the Exception class / Signal."
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   782
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   783
    <context: #return>
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   784
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   785
    ^ self
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   786
	raise:aSignalSymbolOrErrorClass
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   787
	receiver:someNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   788
	selector:sel
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   789
	arguments:#()
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   790
	errorString:text
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   791
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   792
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   793
     Number
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   794
	raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   795
	receiver:1.0
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   796
	selector:#foo
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   797
	errorString:'foo bar test'
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   798
    "
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   799
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   800
    "Modified: / 16.11.2001 / 14:13:16 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   801
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   802
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   803
!Number class methodsFor:'misc'!
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   804
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   805
displayRadix:aNumber
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   806
    "being tired of always sending #printStringRadix: in the inspectors,
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   807
     this allows you to change the default print radix for the displayString
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   808
     method."
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   809
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   810
    DefaultDisplayRadix := aNumber
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   811
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   812
    "
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   813
     Integer displayRadix:16. 123456 inspect
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   814
     Integer displayRadix:10. 123456 inspect
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   815
    "
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   816
! !
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   817
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
   818
!Number class methodsFor:'private'!
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   819
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   820
readMantissaAndScaleFrom:aStream radix:radix
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   821
    "helper for readFrom: -
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   822
     return the mantissa (post-decimal-point digits) from the (character-)stream aStream;
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   823
     in addition, the mantissa as integer and the scale (number of postDecimalPoint digits) is returned
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   824
     (both to support reading fixedPoint numbers and to not loose precision).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   825
     The integer mantissa is needed as we do not yet know the target type (could be LongFloat or even QDouble).
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   826
     No whitespace is skipped.
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   827
     Errs if no number is available on aStream."
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   828
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   829
    |nextChar value factor intMantissa scale digit scaleFactor xvalue|
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   830
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   831
    value := 0.0.
10320
a573647dad4f avoid longfloats if possible
Claus Gittinger <cg@exept.de>
parents: 10191
diff changeset
   832
    factor := 1.0 / radix.
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   833
    self isAbstract ifFalse:[    
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   834
        value := self zero.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   835
        factor := self unity / (self coerce:radix).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   836
    ].
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   837
    scale := 0.
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   838
    scaleFactor := 1.
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   839
    intMantissa := 0.
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   840
    nextChar := aStream peekOrNil.
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   841
    [nextChar notNil and:[nextChar isDigitRadix:radix]] whileTrue:[
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   842
        digit := nextChar digitValue.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   843
        scaleFactor := scaleFactor * radix.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   844
        value := value + (digit * factor).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   845
        intMantissa := (intMantissa * radix) + digit.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   846
        factor := factor / radix.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   847
        scale := scale + 1.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   848
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   849
        (scale > 6 and:[self isAbstract]) ifTrue:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   850
            factor := factor asLongFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   851
            value := value asLongFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   852
        ].
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   853
        aStream next.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   854
        nextChar := aStream peekOrNil
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   855
    ].
7388
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
   856
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   857
    self isAbstract ifFalse:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   858
        xvalue := (self coerce:intMantissa) / (self coerce:scaleFactor).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   859
    ] ifTrue:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   860
        scale > 6 ifTrue:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   861
            xvalue := intMantissa asLongFloat / scaleFactor asLongFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   862
        ] ifFalse:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   863
            xvalue := intMantissa asFloat / scaleFactor asFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   864
        ].
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   865
    ].    
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   866
    ^ (Array with:xvalue with:intMantissa with:scale).
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   867
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   868
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   869
     Number readMantissaAndScaleFrom:'234'    readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   870
     Number readMantissaAndScaleFrom:'2'      readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   871
     Number readMantissaAndScaleFrom:'234567' readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   872
     Number readMantissaAndScaleFrom:'234000' readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   873
     Number readMantissaAndScaleFrom:'234'    readStream radix:10.
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   874
     Number readMantissaAndScaleFrom:'000234' readStream radix:10.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   875
     Number readMantissaAndScaleFrom:'000000000000000000000000000024' readStream radix:10.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   876
     Number readMantissaAndScaleFrom:'123456789012345678901234567890' readStream radix:10.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   877
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   878
     Number readMantissaAndScaleFrom:'12345678901234567890' readStream radix:10.
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   879
    "
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   880
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   881
    "Modified: / 17-06-2017 / 03:03:03 / cg"
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   882
!
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   883
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   884
readMantissaFrom:aStream radix:radix
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   885
    "helper for readFrom: -
6692
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   886
     return the mantissa (post-decimal-point digits)
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   887
     from the (character-)stream aStream;
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   888
     No whitespace is skipped.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   889
     Errs if no number available."
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   890
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   891
    ^ (self readMantissaAndScaleFrom:aStream radix:radix) first
3375
7c64da3964e4 faster conversion from string (due to slow #pastEnd)
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
   892
6692
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   893
    "
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   894
     Number readMantissaFrom:'234'    readStream radix:10.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   895
     Number readMantissaFrom:'2'      readStream radix:10.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   896
     Number readMantissaFrom:'234567' readStream radix:10.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   897
    "
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   898
3375
7c64da3964e4 faster conversion from string (due to slow #pastEnd)
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
   899
    "Modified: / 14.4.1998 / 18:47:47 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   900
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   901
8892
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   902
!Number class methodsFor:'queries'!
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   903
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   904
isAbstract
11224
a9a66cee404f comment
Claus Gittinger <cg@exept.de>
parents: 11136
diff changeset
   905
    "Return if this class is an abstract class.
a9a66cee404f comment
Claus Gittinger <cg@exept.de>
parents: 11136
diff changeset
   906
     True is returned for Number here; false for subclasses.
19457
8f56a5bde306 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19249
diff changeset
   907
     Abstract subclasses must redefine this again."
11224
a9a66cee404f comment
Claus Gittinger <cg@exept.de>
parents: 11136
diff changeset
   908
8892
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   909
    ^ self == Number
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   910
! !
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   911
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7214
diff changeset
   912
!Number methodsFor:'Compatibility-Squeak'!
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   913
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   914
asSmallAngleDegrees
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   915
    "Return the receiver normalized to lie within the range (-180, 180)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   916
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   917
    | pos |
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   918
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   919
    pos := self \\ 360.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   920
    pos > 180 ifTrue: [pos := pos - 360].
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   921
    ^ pos
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   922
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   923
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   924
     #(-500 -300 -150 -5 0 5 150 300 500 1200)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   925
	collect: [:n | n asSmallAngleDegrees]
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   926
    "
6072
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   927
!
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   928
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   929
closeFrom:aNumber
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   930
    "are these two numbers close?"
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   931
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   932
    ^ self closeFrom:aNumber withEpsilon:(self class epsilonForCloseTo)
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   933
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   934
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   935
     9.0 closeTo: 8.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   936
     9.9 closeTo: 9
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   937
     (9/3) closeTo: 2.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   938
     1 closeTo: 0.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   939
     1 closeTo: 1.0001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   940
     1 closeTo: 1.001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   941
     1 closeTo: 0.999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   942
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   943
     0.9999 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   944
     1.0001 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   945
     1.001 closeTo: 1
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   946
     0.999 closeTo: 1
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   947
     Float NaN closeTo:Float NaN
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   948
     Float infinity closeTo:Float infinity
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   949
    "
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   950
!
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   951
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   952
closeFrom:aNumber withEpsilon:eps
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   953
    "are these two numbers close?"
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   954
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   955
    | fuzz |
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   956
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   957
    self isNaN == aNumber isNaN ifFalse: [^ false].
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   958
    self isInfinite == aNumber isInfinite ifFalse: [^ false].
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   959
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   960
    fuzz := (self abs max:aNumber abs) * eps.
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   961
    ^ (self - aNumber) abs <= fuzz
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   962
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   963
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   964
     9.0 closeTo: 8.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   965
     9.9 closeTo: 9
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   966
     (9/3) closeTo: 2.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   967
     1 closeTo: 0.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   968
     1 closeTo: 1.0001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   969
     1 closeTo: 1.001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   970
     1 closeTo: 0.999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   971
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   972
     0.9999 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   973
     1.0001 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   974
     1.001 closeTo: 1
6345
cfe5db4fe391 Only comments
Stefan Vogel <sv@exept.de>
parents: 6335
diff changeset
   975
     0.999 closeTo: 1
cfe5db4fe391 Only comments
Stefan Vogel <sv@exept.de>
parents: 6335
diff changeset
   976
     Float NaN closeTo:Float NaN
cfe5db4fe391 Only comments
Stefan Vogel <sv@exept.de>
parents: 6335
diff changeset
   977
     Float infinity closeTo:Float infinity
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   978
    "
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   979
!
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   980
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
   981
closeTo:num
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   982
    "are these two numbers close to each other?"
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
   983
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   984
    ^ self closeTo:num withEpsilon:(self class epsilonForCloseTo)
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   985
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   986
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   987
     1 closeTo:1.0000000001
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   988
     1 closeTo:1.001
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   989
     1 closeTo:1.001 withEpsilon:0.001
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   990
    "
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   991
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   992
    "Created: / 5.11.2001 / 18:07:26 / cg"
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   993
!
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   994
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   995
closeTo:num withEpsilon:eps
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   996
    "are these two numbers close to each other?"
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   997
6374
fad888313ce3 closeTo: fix
Claus Gittinger <cg@exept.de>
parents: 6345
diff changeset
   998
    num isNumber ifFalse:[^false].
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   999
    ^ num closeFrom:self withEpsilon:eps
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1000
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1001
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1002
     1 closeTo:1.0000000001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1003
     1 closeTo:1.001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1004
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1005
     1 closeTo:1.001 withEpsilon:0.1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1006
     1 closeTo:1.201 withEpsilon:0.1
12979
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1007
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1008
     3.14 closeTo:(3.14 asFixedPoint:2)
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1009
     (3.14 asFixedPoint:2) closeTo:3.14
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1010
    "
6155
00eaf2fa55bc isReal comment
Claus Gittinger <cg@exept.de>
parents: 6154
diff changeset
  1011
12979
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1012
    "Created: / 05-11-2001 / 18:07:26 / cg"
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1013
    "Modified: / 02-08-2010 / 13:27:22 / cg"
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1014
!
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1015
9139
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1016
degreeCos
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1017
    "Return the cosine of the receiver taken as an angle in degrees."
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1018
9139
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1019
    ^ self degreesToRadians cos
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1020
!
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1021
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1022
degreeSin
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1023
    "Return the sine of the receiver taken as an angle in degrees."
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1024
9139
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1025
    ^ self degreesToRadians sin
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1026
!
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1027
11712
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1028
degreeTan
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1029
    "Return the cosine of the receiver taken as an angle in degrees."
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1030
11712
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1031
    ^ self degreesToRadians tan
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1032
!
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1033
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1034
isEqual: aNumber within: accuracy
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1035
	^(self - aNumber) abs < accuracy
17127
f2611d8d0ce0 class: Number
Claus Gittinger <cg@exept.de>
parents: 17060
diff changeset
  1036
!
f2611d8d0ce0 class: Number
Claus Gittinger <cg@exept.de>
parents: 17060
diff changeset
  1037
14495
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1038
rounded:n
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1039
    "Answer the float rounded with n digits of precision"
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1040
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1041
    | mult |
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1042
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1043
    mult := 10 raisedTo: n.
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1044
    ^ (((self * mult) rounded) asFloat / mult).
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1045
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1046
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1047
     7 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1048
     7.1 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1049
     7.2345 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1050
     7.2385 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1051
     7.2341 rounded:3
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1052
     7.2345 rounded:3
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1053
     7.2348 rounded:3
14495
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1054
    "
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
  1055
! !
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
  1056
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1057
!Number methodsFor:'coercing & converting'!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1058
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1059
i
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1060
    "return a complex number, with the receiver as imaginary part, 0 as real part"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1061
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1062
    ^ Complex
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1063
	real:0
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1064
	imaginary:self
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1065
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1066
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1067
     3i
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1068
     (1+1i)
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1069
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1070
! !
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1071
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1072
!Number methodsFor:'comparing'!
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1073
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1074
isAlmostEqualTo:aNumber nEpsilon:nE
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1075
    "return true, if the argument, aNumber represents almost the same numeric value
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1076
     as the receiver, false otherwise.
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1077
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1078
     nE is the number of minimal float distances, that the numbers may differ and
17207
75c41a799425 class: Number
Claus Gittinger <cg@exept.de>
parents: 17190
diff changeset
  1079
     still be considered equal. See documentation in LimitedPrecisionReal for more detail.
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1080
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1081
     For background information why floats need this
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1082
     read: http://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1083
    "
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1084
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1085
    |f1 f2 diff scaledEpsilon largest|
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1086
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1087
    diff := (self - aNumber) abs.
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1088
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1089
    scaledEpsilon := nE * diff class epsilon.
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1090
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1091
    diff <= scaledEpsilon ifTrue:[
21812
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1092
        "compare for really close values near 0"
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1093
        ^ true.
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1094
    ].
21812
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1095
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1096
    "scaled comparison for larger values"
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1097
    f1 := self abs.
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1098
    f2 := aNumber abs.
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1099
    largest := f1 > f2 ifTrue:[f1] ifFalse:[f2].
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1100
    ^ (diff <= (scaledEpsilon * largest)).
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1101
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1102
    "Modified: / 15-06-2017 / 09:55:15 / cg"
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1103
! !
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1104
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1105
!Number methodsFor:'converting'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1106
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1107
% aNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1108
    "Return a complex number with the receiver as the real part and
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1109
     aNumber as the imaginary part"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1110
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1111
    ^ Complex real:self imaginary:aNumber
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1112
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1113
    "Modified: / 9.7.1998 / 10:18:12 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1114
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1115
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1116
+/- anError
14009
a2b68a9c9719 comment
Claus Gittinger <cg@exept.de>
parents: 13898
diff changeset
  1117
    "return a MeasurementValue with a given error."
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1118
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1119
    ^ MeasurementValue value:self minValue:(self-anError) maxValue:(self+anError)
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1120
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1121
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1122
     (100 +/- 5) * 2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1123
     (100 +/- 5) * (100 +/- 10)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1124
     (100 +/- 5) + (100 +/- 10)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1125
     (100 +/- 5) - (100 +/- 10)
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1126
    "
14009
a2b68a9c9719 comment
Claus Gittinger <cg@exept.de>
parents: 13898
diff changeset
  1127
a2b68a9c9719 comment
Claus Gittinger <cg@exept.de>
parents: 13898
diff changeset
  1128
    "Modified (comment): / 14-02-2012 / 14:17:36 / cg"
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1129
!
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1130
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1131
@ aNumber
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1132
    "return a Point with the receiver as x-coordinate and the argument
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1133
     as y-coordinate"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1134
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1135
%{  /* NOCONTEXT */
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1136
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1137
    /*
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1138
     * I cannot tell if this special code is worth anything
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1139
     */
5322
411b6c0f7250 renamed sone structures;
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  1140
    if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1141
	OBJ newPoint;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1142
	int spc;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1143
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1144
	__qCheckedNew(newPoint, sizeof(struct __Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1145
	__InstPtr(newPoint)->o_class = @global(Point);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1146
	__qSTORE(newPoint, @global(Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1147
	__PointInstPtr(newPoint)->p_x = self;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1148
	__PointInstPtr(newPoint)->p_y = aNumber;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1149
	if (! __bothSmallInteger(self, aNumber)) {
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1150
	    spc = __qSpace(newPoint);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1151
	    __STORE_SPC(newPoint, aNumber, spc);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1152
	    __STORE_SPC(newPoint, self, spc);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1153
	}
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1154
	RETURN ( newPoint );
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1155
    }
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1156
%}
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1157
.
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1158
    ^ Point x:self y:aNumber
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1159
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1160
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1161
asComplex
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1162
    "Return a complex number with the receiver as the real part and
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1163
     zero as the imaginary part"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1164
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  1165
    ^ Complex real:self
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1166
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1167
    "Modified: / 9.7.1998 / 10:18:16 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1168
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1169
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1170
asMetaNumber
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1171
    ^ SomeNumber new realNumber:self
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1172
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1173
7214
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1174
asNumber
17060
7b39761eb1ce class: Number
Claus Gittinger <cg@exept.de>
parents: 17058
diff changeset
  1175
    "I am a number, so return myself"
7214
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1176
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1177
    ^ self.
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1178
!
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1179
19702
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1180
asPercentFrom:fullAmount
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1181
    "what is the percentage
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1182
     taking the receiver's value from the argument"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1183
19702
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1184
    ^ (self / fullAmount) * 100.
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1185
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1186
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1187
     20 asPercentFrom:100
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1188
     (10 asPercentFrom:156) asFixedPoint:2
19702
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1189
     (15.6 asPercentFrom:156) asFixedPoint:2
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1190
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1191
!
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1192
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1193
asPoint
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1194
    "return a new Point with the receiver as all coordinates;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1195
     often used to supply the same value in two dimensions, as with
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1196
     symmetrical gridding or scaling."
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1197
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1198
%{  /* NOCONTEXT */
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1199
5322
411b6c0f7250 renamed sone structures;
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  1200
    if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1201
	OBJ newPoint;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1202
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1203
	__qCheckedNew(newPoint, sizeof(struct __Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1204
	__InstPtr(newPoint)->o_class = @global(Point);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1205
	__qSTORE(newPoint, @global(Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1206
	__PointInstPtr(newPoint)->p_x = self;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1207
	__PointInstPtr(newPoint)->p_y = self;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1208
	__STORE(newPoint, self);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1209
	RETURN ( newPoint );
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1210
    }
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1211
%}.
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1212
    ^ Point x:self y:self
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1213
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1214
13898
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1215
asTimeDuration
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1216
    "return an TimeDuration object from the receiver, taking the receiver
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1217
     as number of seconds"
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1218
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1219
    ^ TimeDuration seconds:self
13898
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1220
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1221
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1222
     5 asTimeDuration
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1223
     50.25 asTimeDuration
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1224
     3600 asTimeDuration
13898
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1225
    "
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1226
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1227
    "Created: / 08-01-2012 / 19:04:04 / cg"
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1228
!
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1229
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1230
degreesToRadians
21105
f51ebd03d20b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20866
diff changeset
  1231
    "interpreting the receiver as degrees, return the radians"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1232
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  1233
    ^ self * (Float pi / 180.0)
7388
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1234
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1235
    "
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1236
     180 degreesToRadians
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1237
     Float pi radiansToDegrees
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1238
    "
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1239
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1240
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1241
literalArrayEncoding
1245
c8afea3d5af0 commentary
Claus Gittinger <cg@exept.de>
parents: 1210
diff changeset
  1242
    "encode myself as an array literal, from which a copy of the receiver
c8afea3d5af0 commentary
Claus Gittinger <cg@exept.de>
parents: 1210
diff changeset
  1243
     can be reconstructed with #decodeAsLiteralArray."
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1244
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1245
    ^ self
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1246
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1247
    "Modified: 1.9.1995 / 02:25:26 / claus"
1245
c8afea3d5af0 commentary
Claus Gittinger <cg@exept.de>
parents: 1210
diff changeset
  1248
    "Modified: 22.4.1996 / 13:00:27 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1249
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1250
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1251
percentOf:hundredPercent
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1252
    "how many is self-percent from the argument"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1253
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1254
    ^ (hundredPercent / 100 * self)
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1255
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1256
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1257
     20 percentOf:100
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1258
     (10 percentOf:156) asFixedPoint:2
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1259
     (105 percentOf:156) asFixedPoint:2
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1260
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1261
!
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1262
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1263
radiansToDegrees
21105
f51ebd03d20b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20866
diff changeset
  1264
    "interpreting the receiver as radians, return the degrees"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1265
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  1266
    ^ self * (180.0 / Float pi)
7388
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1267
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1268
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1269
     180 degreesToRadians
7388
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1270
     Float pi radiansToDegrees
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1271
    "
6637
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1272
!
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1273
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1274
withScale:newScale
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1275
    "return a fixedPoint number representing the same value as the receiver,
6637
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1276
     with newScale number of post-decimal digits"
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1277
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1278
    ^ self asFixedPoint:newScale
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1279
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1280
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1281
     1234 withScale:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1282
     1234.1 withScale:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1283
     1234.12 withScale:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1284
     1234.123 withScale:2
6637
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1285
     (1/7) withScale:2
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1286
    "
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1287
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1288
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1289
!Number methodsFor:'converting-times'!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1290
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1291
days
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1292
    "return a TimeDuration representing this number of days"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1293
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1294
    ^ TimeDuration days:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1295
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1296
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1297
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1298
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1299
     10 minutes
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1300
     1 days
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1301
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1302
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1303
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1304
hours
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1305
    "return a TimeDuration representing this number of hours"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1306
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1307
    ^ TimeDuration hours:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1308
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1309
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1310
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1311
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1312
     10 minutes
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1313
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1314
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1315
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1316
milliseconds
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1317
    "return a TimeDuration representing this number of milliseconds"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1318
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1319
    ^ TimeDuration fromMilliseconds:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1320
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1321
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1322
     1000 milliseconds
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1323
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1324
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1325
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1326
minutes
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1327
    "return a TimeDuration representing this number of minutes"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1328
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1329
    ^ TimeDuration minutes:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1330
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1331
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1332
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1333
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1334
     10 minutes
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1335
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1336
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1337
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1338
seconds
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1339
    "return a TimeDuration representing this number of seconds"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1340
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1341
    ^ TimeDuration seconds:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1342
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1343
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1344
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1345
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1346
     10 minutes
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1347
    "
13631
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1348
!
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1349
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1350
weeks
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1351
    "return a TimeDuration representing this number of weeks"
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1352
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1353
    ^ TimeDuration weeks:self
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1354
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1355
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1356
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1357
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1358
     10 minutes
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1359
     1 days
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1360
     1 weeks
13631
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1361
    "
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1362
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1363
    "Created: / 05-09-2011 / 11:17:59 / cg"
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1364
! !
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1365
16406
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1366
!Number methodsFor:'double dispatching'!
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1367
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1368
differenceFromTimestamp:aTimestamp
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1369
    "I am to be interpreted as seconds, return the timestamp this number of seconds
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1370
     before aTimestamp"
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1371
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1372
    ^ aTimestamp subtractMilliseconds:(self * 1000) truncated.
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1373
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1374
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1375
     100.0 differenceFromTimestamp:Timestamp now
16406
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1376
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1377
     |t1 t2|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1378
     t1 := Timestamp now.
16406
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1379
     t2 := 1.5 differenceFromTimestamp:t1.
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1380
     t1 inspect. t2 inspect.
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1381
    "
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1382
! !
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1383
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1384
!Number methodsFor:'intervals'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1385
6072
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1386
downTo:stop
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1387
    "return an interval from receiver down to the argument, incrementing by -1"
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1388
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1389
    ^ self to:stop by:-1
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1390
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1391
    "
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1392
     (10 downTo:1) do:[:i | Transcript showCR:i].
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1393
    "
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1394
!
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1395
15595
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1396
downTo:stop by:step
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1397
    "return an interval from receiver down to the argument, decrementing by step"
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1398
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1399
    ^ self to:stop by:step negated
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1400
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1401
    "
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1402
     (10 downTo:1 by:0.5) do:[:i | Transcript showCR:i].
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1403
    "
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1404
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1405
    "Created: / 01-08-2013 / 14:36:56 / cg"
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1406
!
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1407
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1408
to:stop
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1409
    "return an interval from receiver up to the argument, incrementing by 1"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1410
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1411
    ^ Interval from:self to:stop
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1412
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1413
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1414
to:stop by:step
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1415
    "return an interval from receiver up to the argument, incrementing by step"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1416
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1417
    ^ Interval from:self to:stop by:step
6154
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1418
!
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1419
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1420
to:stop byFactor:factor
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1421
    "return a geometric series from receiver up to the argument;
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1422
     elements have a constant factor in between"
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1423
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1424
    ^ GeometricSeries from:self to:stop byFactor:factor
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1425
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1426
    "
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1427
     (1 to:256 byFactor:2)
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1428
     (256 to:1 byFactor:1/2)
6154
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1429
    "
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1430
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1431
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1432
!Number methodsFor:'iteration'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1433
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1434
timesRepeat:aBlock
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1435
    "evaluate the argument, aBlock self times"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1436
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1437
    |count|
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1438
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1439
    count := self.
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1440
    [count > 0] whileTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1441
	aBlock value.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1442
	count := count - 1
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1443
    ]
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1444
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1445
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1446
!Number methodsFor:'mathematical functions'!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1447
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1448
cbrt
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1449
    "return the cubic root of the receiver"
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1450
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1451
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1452
    "/ retry after converting to float
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1453
    (self isLimitedPrecisionReal not
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1454
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1455
	^ self asFloat cbrt.
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1456
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1457
    "/ very slow fallback
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1458
    ^ self cbrt_withAccuracy:self epsilon
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1459
!
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1460
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1461
conjugated
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1462
    "Return the complex conjugate of this Number."
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1463
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1464
    ^ self
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1465
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1466
    "Modified: / 9.7.1998 / 10:17:31 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1467
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1468
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1469
exp
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1470
    "compute e**x of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1471
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1472
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1473
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1474
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1475
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1476
	^ self asFloat exp.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1477
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1478
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  1479
    ^ self exp_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1480
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1481
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1482
floorLog:radix
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1483
    "return the logarithm truncated as an integer"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1484
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1485
    ^ (self log:radix) floor
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1486
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1487
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1488
imaginary
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1489
    "Return the imaginary part of this Number."
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1490
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1491
    ^ 0
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1492
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1493
    "Modified: / 9.7.1998 / 10:17:24 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1494
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1495
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1496
ldexp:exp
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1497
    "multiply the receiver by an integral power of 2.
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1498
     I.e. return self * (2 ^ exp)"
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1499
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1500
    ^ self * (2 raisedTo:exp)
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1501
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1502
    "Created: / 19-06-2017 / 01:43:35 / cg"
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1503
!
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1504
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1505
ln
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1506
    "return the natural logarithm of myself.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1507
     Raises an exception, if the receiver is less or equal to zero."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1508
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1509
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1510
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1511
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1512
    or:[self generality < 1.0 generality]) ifTrue:[
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1513
        ^ self asLongFloat ln.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1514
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1515
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  1516
    ^ self ln_withAccuracy:self epsilon
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1517
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1518
    "
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1519
     (10 raisedTo:1000) ln
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1520
    "
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1521
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1522
    "Modified (comment): / 18-06-2017 / 23:31:57 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1523
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1524
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1525
log
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1526
    "return log base 10 of the receiver.
12584
d32f98e9b219 comment/format in: #log
Claus Gittinger <cg@exept.de>
parents: 12112
diff changeset
  1527
     Alias for log:10."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1528
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1529
    ^ self log10
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1530
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1531
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1532
log10
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1533
    "return log base-10 of the receiver.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1534
     Raises an exception, if the receiver is less or equal to zero.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1535
     Here, fallback to the general logarithm code."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1536
10550
0f2a07595d1c Fix bug 641: changed #log10 to be more accurate
Stefan Vogel <sv@exept.de>
parents: 10325
diff changeset
  1537
    (self isLimitedPrecisionReal not
0f2a07595d1c Fix bug 641: changed #log10 to be more accurate
Stefan Vogel <sv@exept.de>
parents: 10325
diff changeset
  1538
    or:[self generality < 1.0 generality]) ifTrue:[
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1539
        ^ self asLongFloat log10.
10550
0f2a07595d1c Fix bug 641: changed #log10 to be more accurate
Stefan Vogel <sv@exept.de>
parents: 10325
diff changeset
  1540
    ].
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1541
    ^ self ln / self class ln10
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1542
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1543
    "
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1544
     (10 raisedTo:1000) log10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1545
     (10 raisedTo:2000) log10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1546
     (10 raisedTo:4000) log10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1547
     (10 raisedTo:8000) log10
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1548
    "
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1549
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1550
    "Modified (comment): / 16-06-2017 / 11:06:15 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1551
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1552
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1553
log:aNumber
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  1554
    "return log base aNumber of the receiver.
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  1555
     This will usually return a float value"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1556
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1557
    ^ self ln / aNumber ln
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1558
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1559
    "
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1560
      1000 log:10
19049
7ab1aa4ef01e #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19041
diff changeset
  1561
      9 log:3
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1562
      (1000 log:10) floor
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1563
      (10 raisedTo:1000) log:10
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1564
    "
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1565
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1566
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1567
raisedTo:aNumber
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1568
    "return the receiver raised to aNumber"
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1569
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1570
    aNumber = 0 ifTrue:[^ 1].
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1571
    aNumber = 1 ifTrue:[^ self].
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1572
    aNumber isInteger ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1573
	^ self raisedToInteger:aNumber
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1574
    ].
19018
441811c95c15 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18863
diff changeset
  1575
    aNumber isNumber ifFalse:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1576
	^ aNumber raisedFromNumber:self.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1577
    ].
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1578
    ^ self asFloat raisedTo:aNumber
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1579
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1580
    "
19092
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1581
     2 raisedTo: 4
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1582
     -2 raisedTo: 4
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1583
     4 raisedTo: 1/2
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1584
     -4 raisedTo: 1/2
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1585
     8 raisedTo: 1/3
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1586
     -8 raisedTo: 1/3
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1587
     10 raisedTo: 4
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1588
     10 raisedTo: -4
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1589
    "
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1590
!
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1591
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1592
real
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1593
    "Return the real part of this Number."
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1594
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1595
    ^ self
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1596
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1597
    "Modified: / 9.7.1998 / 10:17:17 / cg"
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1598
!
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1599
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1600
sqrt
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1601
    "return the square root of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1602
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1603
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1604
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1605
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1606
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1607
	^ self asFloat sqrt.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1608
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1609
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  1610
    ^ self sqrt_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1611
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1612
10191
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1613
sqrtWithErrorLessThan:epsilon
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1614
    "compute the square root, using the Newton method.
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1615
     The approximated return value has an error less than the given epsilon."
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1616
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1617
    |y yN|
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1618
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1619
    yN := self / 2.
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1620
    [
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1621
       y := yN.
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1622
       yN := ( y + (self / y) ) / 2.
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1623
    ] doUntil:[ (yN - y) abs < epsilon ].
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1624
    ^ yN.
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1625
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1626
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1627
     (2 asFixedPoint:4) sqrtWithErrorLessThan:0.001
10191
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1628
    "
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1629
!
4974027704a5 sqrtWithErrorLessThan:
Claus Gittinger <cg@exept.de>
parents: 9333
diff changeset
  1630
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1631
timesTwoPower:anInteger
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1632
    "Return the receiver multiplied by 2 raised to the power of the argument.
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1633
     For protocol completeness wrt. Squeak and ST80."
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1634
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1635
    anInteger >= 0 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1636
	^ self * (1 bitShift:anInteger)
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1637
    ].
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1638
    ^ self / (1 bitShift:anInteger negated)
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1639
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1640
    "
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1641
     123 timesTwoPower:0   -> 123
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1642
     123 timesTwoPower:1   -> 246
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1643
     123 timesTwoPower:2   -> 492
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1644
     123 timesTwoPower:3   -> 984
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1645
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1646
     (2 timesTwoPower: -150) timesTwoPower: 150  -> 2
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1647
    "
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1648
! !
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1649
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1650
!Number methodsFor:'measurement values'!
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1651
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1652
maxValue
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1653
    "the maximum possible value taking me as a measurement with possible error;
20421
5c1194f503ab #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20331
diff changeset
  1654
     as I am exact, that's myself"
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1655
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1656
    ^ self
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1657
!
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1658
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1659
minValue
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1660
    "the minimum possible value taking me as a measurement with possible error;
20421
5c1194f503ab #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20331
diff changeset
  1661
     as I am exact, that's myself"
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1662
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1663
    ^ self
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1664
! !
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1665
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1666
!Number methodsFor:'printing & storing'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1667
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1668
displayOn:aGCOrStream
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1669
    "return a string to display the receiver.
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1670
     The output radix is usually 10, but can be changed by setting
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1671
     DefaultDisplayRadix (see Integer>>displayRadix:)"
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1672
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1673
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1674
    "/ old ST80 means: draw-yourself on a GC.
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1675
    (aGCOrStream isStream) ifFalse:[
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1676
        ^ super displayOn:aGCOrStream
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1677
    ].
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1678
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1679
    (DefaultDisplayRadix isNil or:[DefaultDisplayRadix == 10]) ifTrue:[
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1680
        self printOn:aGCOrStream
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1681
    ] ifFalse:[
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1682
        self printOn:aGCOrStream base:DefaultDisplayRadix showRadix:true.
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1683
    ].
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1684
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1685
    "
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1686
     Integer displayRadix:16. 12345
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1687
     Integer displayRadix:2.  12345
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1688
     Integer displayRadix:10. 12345
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1689
    "
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1690
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1691
    "Modified (comment): / 22-02-2017 / 16:52:16 / cg"
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1692
!
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1693
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1694
printOn:aStream
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1695
    "append a printed description of the receiver to aStream"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1696
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1697
    self printOn:aStream base:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1698
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1699
    "Modified: / 20.1.1998 / 14:10:45 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1700
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1701
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1702
printOn:aStream base:b
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1703
    "return a string representation of the receiver in the specified
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1704
     radix (without the initial XXr)"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1705
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1706
    ^ self printOn:aStream base:b showRadix:false
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1707
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1708
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1709
     10 printOn:Transcript base:3
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1710
     31 printOn:Transcript base:3
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1711
     -20 printOn:Transcript base:16
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1712
     -20 printOn:Transcript base:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1713
     3000 factorial printOn:Transcript base:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1714
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1715
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1716
    "Modified: / 20.1.1998 / 18:05:02 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1717
    "Modified: / 7.9.2001 / 13:52:17 / cg"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1718
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1719
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1720
printOn:aStream base:b showRadix:showRadix
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1721
    "the central print method for integer.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1722
     Must be defined in concrete classes"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1723
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1724
    self subclassResponsibility
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1725
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1726
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1727
printOn:aStream paddedWith:padCharacter to:size base:radix
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1728
    |s|
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1729
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1730
    radix == 10 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1731
	s := self printString.
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1732
    ] ifFalse:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1733
	s := self printStringRadix:radix.
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1734
    ].
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1735
    s printOn: aStream leftPaddedTo:size with: padCharacter
11098
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1736
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1737
    "
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1738
     100 printOn:Transcript paddedWith:$0 to:10 base:10.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1739
     100 printOn:Transcript paddedWith:$0 to:10 base:16.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1740
     100 printOn:Transcript paddedWith:(Character space) to:10 base:16.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1741
     100 printOn:Transcript paddedWith:(Character space) to:10 base:2.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1742
    "
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1743
!
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1744
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1745
printOn:aStream thousandsSeparator:thousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1746
    "print the receiver as business number with thousands separator to aStream.
11136
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1747
     thousandsSeparator is locale specific and is usualy a single quote ('), a comma or period."
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1748
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1749
    |rest|
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1750
11594
5440d97af571 #printStringWithThousandsSeparator fix for non-integers
Stefan Vogel <sv@exept.de>
parents: 11526
diff changeset
  1751
    self >= 1000 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1752
	(self // 1000) printOn:aStream thousandsSeparator:thousandsSeparator.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1753
	thousandsSeparator printOn:aStream.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1754
	rest := self \\ 1000.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1755
	rest < 100 ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1756
	    aStream nextPut:$0.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1757
	    rest < 10 ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1758
		aStream nextPut:$0.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1759
	    ].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1760
	].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1761
	rest printOn:aStream.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1762
	^ self.
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1763
    ].
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1764
    self printOn:aStream.
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1765
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1766
    "
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1767
     swiss style:
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1768
     1000000 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1769
     12345678 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1770
     1234567 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1771
     123456 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
11136
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1772
     123056 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1773
     12345 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1774
     1234 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1775
     123 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1776
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1777
     (12345678.12 asFixedPoint:2) printOn:Transcript thousandsSeparator:$'.     Transcript cr.
11136
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1778
     1234567.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1779
     123456.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1780
     123056.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1781
     12345.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1782
     1234.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1783
     123.12 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1784
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1785
     us style:
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1786
     1000000 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1787
     12345678 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1788
     1234567 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1789
     123456 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1790
     12345 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1791
     1234 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1792
     123 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1793
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1794
     german (european ?) style
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1795
     1000000 printOn:Transcript thousandsSeparator:$..     Transcript cr.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1796
     12345678 printOn:Transcript thousandsSeparator:$..     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1797
     1234567 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1798
     123456 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1799
     12345 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1800
     1234 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1801
     123 printOn:Transcript thousandsSeparator:$..     Transcript cr.
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1802
    "
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1803
!
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1804
11660
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1805
printStringFormat:formatString
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1806
    ^ self printfPrintString:formatString
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1807
!
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1808
20142
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1809
printStringRadix:base
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1810
    "return a string representation of the receiver in the specified
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1811
     base; does NOT prepend XXr to the string.
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1812
     See also: radixPrintStringRadix:
20331
f9e364521eda #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20308
diff changeset
  1813
               printOn:base:showRadix:"
20142
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1814
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1815
    ^ self printStringRadix:base showRadix:false
11098
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1816
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1817
    "
20331
f9e364521eda #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20308
diff changeset
  1818
     10000000000000000000000000000000000000000000 printStringRadix:16    
f9e364521eda #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20308
diff changeset
  1819
     -10000000000000000000000000000000000000000000 printStringRadix:16   
11098
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1820
    "
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1821
!
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1822
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1823
printStringRadix:base showRadix:showRadixBoolean
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1824
    "return a string representation of the receiver in the specified
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1825
     base; does NOT prepend XXr to the string.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1826
     See also: radixPrintStringRadix:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1827
	       printOn:base:showRadix:"
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1828
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1829
    |s|
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1830
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1831
    s := WriteStream on:(String basicNew:20).
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1832
    self printOn:s base:base showRadix:showRadixBoolean.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1833
    ^ s contents
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1834
20142
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1835
    "
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1836
     10000000000000000000000000000000000000000000 printStringRadix:16 showRadix:false
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1837
     10000000000000000000000000000000000000000000 printStringRadix:16 showRadix:true
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1838
    "
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1839
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1840
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1841
    "Created: / 23-09-2011 / 13:59:19 / cg"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1842
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1843
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1844
printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1845
    "print the receiver as swiss business number with thousands separator to aStream.
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1846
     Caveat: Should use the separator from the locale here"
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1847
20866
076ab5e1f702 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20421
diff changeset
  1848
    ^ self printStringWithThousandsSeparator:(UserPreferences current thousandsSeparatorCharacter).
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1849
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1850
    "
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1851
     1000000 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1852
     12345678 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1853
     1234567 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1854
     123456 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1855
     12345 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1856
     1234 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1857
     123 printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1858
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1859
     1000000 asFixedPoint printStringWithThousandsSeparator
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1860
     12345678 asFixedPoint printStringWithThousandsSeparator
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1861
     1234567 asFixedPoint printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1862
     123456 asFixedPoint printStringWithThousandsSeparator
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1863
     12345 asFixedPoint printStringWithThousandsSeparator
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1864
     1234 asFixedPoint printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1865
     123 asFixedPoint printStringWithThousandsSeparator
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1866
     ((9999999//10000) asFixedPoint:9) printStringWithThousandsSeparator
20866
076ab5e1f702 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20421
diff changeset
  1867
     ((99999999//10000) asFixedPoint:9) printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1868
    "
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1869
!
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1870
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1871
printStringWithThousandsSeparator:thousandsSeparator
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1872
    "print the receiver as business number with a thousands separator to aStream.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1873
     Notice:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1874
	americans use comma
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1875
	germans (europeans ?) use a dot
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1876
	swiss people (business people ?) use a single quote
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1877
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1878
     Caveat: Should use the separator from the locale here"
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1879
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1880
    ^ String streamContents:[:s | self printOn:s thousandsSeparator:thousandsSeparator].
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1881
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1882
    "
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1883
     Transcript showCR:(1000000 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1884
     Transcript showCR:(12345678 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1885
     Transcript showCR:(1234567 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1886
     Transcript showCR:(123456 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1887
     Transcript showCR:(12345 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1888
     Transcript showCR:(1234 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1889
     Transcript showCR:(123 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1890
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1891
     Transcript showCR:(1000000 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1892
     Transcript showCR:(12345678 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1893
     Transcript showCR:(1234567 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1894
     Transcript showCR:(123456 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1895
     Transcript showCR:(12345 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1896
     Transcript showCR:(1234 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1897
     Transcript showCR:(123 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1898
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1899
     Transcript showCR:((1000000 asFixedPoint:2) printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1900
     Transcript showCR:((12345678 asFixedPoint:2) printStringWithThousandsSeparator:$,).
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1901
     Transcript showCR:((1234567 asFixedPoint:2) printStringWithThousandsSeparator:$,).
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1902
     Transcript showCR:((123456 asFixedPoint:2) printStringWithThousandsSeparator:$,).
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1903
     Transcript showCR:((12345 asFixedPoint:2) printStringWithThousandsSeparator:$,).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1904
     Transcript showCR:((1234 asFixedPoint:2) printStringWithThousandsSeparator:$,).
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1905
     Transcript showCR:((123 asFixedPoint:2) printStringWithThousandsSeparator:$,).
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1906
    "
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1907
!
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1908
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1909
radixPrintStringRadix:radix
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1910
    "return a string representation of the receiver in the specified
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1911
     base; prepend XXr to the string"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1912
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1913
    ^ self printStringRadix:radix showRadix:true
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1914
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1915
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1916
     31 radixPrintStringRadix:2
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1917
     31 radixPrintStringRadix:3
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1918
     31 radixPrintStringRadix:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1919
     31 radixPrintStringRadix:16
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1920
     31 radixPrintStringRadix:36
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1921
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1922
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1923
    "Created: / 19-01-1998 / 17:38:00 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1924
    "Modified: / 20-01-1998 / 14:11:03 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1925
    "Modified: / 23-09-2011 / 14:00:02 / cg"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1926
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1927
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1928
storeOn:aStream
11460
146fb82b5523 comment
Claus Gittinger <cg@exept.de>
parents: 11458
diff changeset
  1929
    "append a string for storing the receiver onto the argument, aStream
146fb82b5523 comment
Claus Gittinger <cg@exept.de>
parents: 11458
diff changeset
  1930
     - since numbers are literals,they store as they print."
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1931
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1932
    ^ self printOn:aStream
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1933
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1934
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1935
storeString
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1936
    "return a string for storing
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1937
     - since numbers are literals, they store as they print."
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1938
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1939
    ^ self printString
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1940
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1941
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1942
!Number methodsFor:'taylor series'!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1943
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1944
arcSin_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1945
    "compute the arcSine of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1946
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1947
    "/ uses taylor series:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1948
    "/                 1*x^3   1*3 * x^5
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1949
    "/    arcSin = x + ----- + ---------- + ...
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1950
    "/                 2* 3    2*4 *  5
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1951
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1952
    |x2 num numf den denf approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1953
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1954
    ((self < -1) or:[self > 1]) ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1955
	^ self class
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1956
	    raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1957
	    receiver:self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1958
	    selector:#arcSin
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1959
	    arguments:#()
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1960
	    errorString:'bad receiver in arcSin'
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  1961
    ].
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  1962
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  1963
    x2 := self * self.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1964
    num := x2 * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1965
    approx := self + (num / 6).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1966
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1967
    numf := 3.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1968
    denf := 4.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1969
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1970
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1971
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1972
	num := (num * x2) * numf.   numf := numf + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1973
	den := den * denf.          denf := denf + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1974
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1975
	delta := num / (den * numf).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1976
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1977
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1978
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1979
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1980
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1981
     0.5 arcSin                                    0.523599
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1982
     0.5q arcSin                        0.523598776
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1983
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1984
     0.5q arcSin_withAccuracy:1         0.520833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1985
     0.5q arcSin_withAccuracy:0.1       0.520833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1986
     0.5q arcSin_withAccuracy:0.01      0.523177083
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1987
     0.5q arcSin_withAccuracy:0.001     0.523525856
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1988
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1989
     0.5q arcSin_withAccuracy:1e-20     0.523598776
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1990
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1991
     0.5 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1992
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1993
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1994
     0.1 arcSin                                    0.100167
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1995
     0.1q arcSin                        0.100167421
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1996
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1997
     0.1q arcSin_withAccuracy:1         0.100166667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1998
     0.1q arcSin_withAccuracy:0.1       0.100166667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1999
     0.1q arcSin_withAccuracy:0.01      0.100166667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2000
     0.1q arcSin_withAccuracy:0.001     0.100166667
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2001
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2002
     0.1q arcSin_withAccuracy:1e-20     0.100167421
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2003
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2004
     0.1 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2005
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2006
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2007
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2008
arcTan_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2009
    "compute the arcTangent of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2010
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2011
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2012
    "/                 x^3   x^5   x^7
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2013
    "/ arcTan(x) = x - --- + --- - --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2014
    "/                  3     5    7
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2015
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2016
    |x2 num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2017
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2018
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2019
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2020
    num := (x2 * self) negated.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2021
    den := 3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2022
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2023
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2024
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2025
	den := den + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2026
	num := (num * x2) negated.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2027
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2028
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2029
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2030
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2031
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2032
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2033
    "
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2034
     1.0 arcTan                       0.785398
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2035
     1q arcTan                        0.785398163
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2036
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2037
     1q arcTan_withAccuracy:1         0.666666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2038
     1q arcTan_withAccuracy:0.1       0.744011544
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2039
     1q arcTan_withAccuracy:0.01      0.790299653
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2040
     1q arcTan_withAccuracy:0.001     0.785897165
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2041
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2042
     1q arcTan_withAccuracy:1e-8      0.785398168
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2043
     1q arcTan_withAccuracy:1e-20     -- not yet, converges very slow
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2044
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2045
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2046
     0.5 arcTan                         0.463648
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2047
     0.5q arcTan                        0.463647609
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2048
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2049
     0.5q arcTan_withAccuracy:1         0.458333333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2050
     0.5q arcTan_withAccuracy:0.1       0.458333333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2051
     0.5q arcTan_withAccuracy:0.01      0.464583333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2052
     0.5q arcTan_withAccuracy:0.001     0.463684276
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2053
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2054
     0.5q arcTan_withAccuracy:1e-20     0.463647609
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2055
     0.5 asLargeFloat arcTan_withAccuracy:1e-30    -- not yet
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2056
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2057
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2058
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2059
cbrt_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2060
    "compute cubic root of the receiver using a newton approx."
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2061
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2062
    "
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2063
      Use Newton's method:
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2064
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2065
		 2*x_n + (a / x_n^2)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2066
	x_n+1 =  ---------------
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2067
		      3
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2068
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2069
	cbrt(a) = x_n
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2070
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2071
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2072
    |approx|
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2073
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2074
    self = 0 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2075
	^ self
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2076
    ].
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2077
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2078
    approx := 1.
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2079
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2080
	|lastApprox|
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2081
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2082
	lastApprox := approx.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2083
	approx := ((approx * 2) + (self / approx / approx)) / 3.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2084
	(approx - lastApprox) abs > epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2085
    ] whileTrue.
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2086
    ^ approx
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2087
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2088
    "
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2089
     8q cbrt                                 2.0
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2090
     8q cbrt_withAccuracy:0.01               2.000004911675504018
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2091
     8q cbrt_withAccuracy:0.0001             2.000000000012062239
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2092
     8q cbrt_withAccuracy:0.0000001          2.0
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2093
     8q cbrt_withAccuracy:0.0000000001       2.0
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2094
     8q cbrt_withAccuracy:0.000000000001     2.0
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2095
     8q cbrt_withAccuracy:LongFloat epsilon  2.0
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2096
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2097
     27q cbrt_withAccuracy:0.01              3.000000541064176501
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2098
     27q cbrt_withAccuracy:LongFloat epsilon  3.0
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2099
     -27q cbrt_withAccuracy:LongFloat epsilon -3.0
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2100
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2101
     MessageTally spyOn:[ |arg|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2102
	arg := 2 asLongFloat.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2103
	1000000 timesRepeat:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2104
	     arg cbrt_withAccuracy:0.000000000001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2105
	]
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2106
     ]
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2107
     Time millisecondsToRun:[ |arg|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2108
	arg := 2 asLongFloat.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2109
	1000000 timesRepeat:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2110
	     arg cbrt_withAccuracy:0.000000000001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2111
	]
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2112
     ]
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2113
    "
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2114
!
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2115
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2116
cos_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2117
    "compute the cosine of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2118
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2119
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2120
    "/               x^2   x^4   x^6
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2121
    "/  cos(x) = 1 - --- + --- - --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2122
    "/                2!!    4!!    6!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2123
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2124
    |x2 facN num den approx lastApprox|
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2125
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2126
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2127
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2128
    num := x2 negated.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2129
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2130
    facN := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2131
    approx := 1 + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2132
    lastApprox := 1.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2133
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2134
    [ (lastApprox - approx) abs > epsilon ] whileTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2135
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2136
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2137
	num := (num * x2) negated.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2138
	lastApprox := approx.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2139
	approx := approx + (num / den).
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2140
    ].
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2141
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2142
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2143
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2144
     1.0 cos                                    0.540302
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2145
     1.0 asLongFloat cos_withAccuracy:1         0.5
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2146
     1.0 asLongFloat cos_withAccuracy:0.1       0.541666667
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2147
     1.0 asLongFloat cos_withAccuracy:0.01      0.540277778
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2148
     1.0 asLongFloat cos_withAccuracy:0.001     0.540302579
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2149
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2150
     1.0 asLongFloat cos_withAccuracy:1e-40     0.540302306
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2151
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2152
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2153
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2154
cosh_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2155
    "compute the hyperbolic cosine of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2156
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2157
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2158
    "/               x^2   x^4   x^6
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2159
    "/    cosh = x + --- + --- + --- ...
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2160
    "/                2!!    4!!    6!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2161
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2162
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2163
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2164
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2165
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2166
    num := x2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2167
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2168
    facN := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2169
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2170
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2171
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2172
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2173
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2174
	num := num * x2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2175
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2176
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2177
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2178
    ] doUntil:[delta <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2179
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2180
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2181
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2182
     1.0 cosh                                    1.54308
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2183
     1.0q cosh_withAccuracy:1         1.5
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2184
     1.0q cosh_withAccuracy:0.1       1.54308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2185
     1.0q cosh_withAccuracy:0.01      1.54308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2186
     1.0q cosh_withAccuracy:0.001     1.54308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2187
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2188
     1.0q cosh_withAccuracy:1e-40   -> 1.543080
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2189
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2190
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2191
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2192
epsilon
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2193
    "return the maximum relative spacing of instances of mySelf
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2194
     (i.e. the value-delta of the least significant bit)"
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2195
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2196
    ^ self class epsilon
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2197
!
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2198
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2199
exp_withAccuracy:epsilon
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2200
    "compute e^x of the receiver using a taylor series approximation.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2201
     This method is only invoked for limitedPrecisionReal classes, which do not compute
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2202
     exp themself (i.e. QDouble)"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2203
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2204
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2205
    "/             x    x^2   x^3
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2206
    "/  e^x = 1 + --- + --- + --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2207
    "/             1!!    2!!    3!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2208
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2209
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2210
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2211
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2212
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2213
    num := x2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2214
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2215
    facN := 2.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2216
    approx := self + 1 + (num / den).
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2217
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2218
    [
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2219
        facN := facN + 1.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2220
        den := den * facN.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2221
        num := num * self.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2222
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2223
        delta := num / den.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2224
        approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2225
    ] doUntil:[delta abs <= epsilon].
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2226
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2227
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2228
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2229
    "
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2230
     -1 exp
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2231
     1.0 exp                                    2.71828
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2232
     1q exp                                     2.71828183
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2233
     2q exp                                     7.3890561
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2234
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2235
     1q exp_withAccuracy:1                      2.66666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2236
     1q exp_withAccuracy:0.1                    2.70833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2237
     1q exp_withAccuracy:0.01                   2.71666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2238
     1q exp_withAccuracy:0.001                  2.71825397
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2239
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2240
     2q exp_withAccuracy:LongFloat epsilon      7.3890561
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2241
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2242
     1.0 asLongFloat exp_withAccuracy:1e-40     2.71828183
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2243
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2244
     5 exp_withAccuracy:1e-40
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2245
     (1 exp_withAccuracy:1e-100) asFixedPoint:100
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2246
    "
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2247
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2248
    "Modified (comment): / 21-06-2017 / 13:54:51 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2249
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2250
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2251
ln_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2252
    "compute ln of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2253
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2254
    "uses taylor series:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2255
		 u^2   u^3
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2256
	ln = u - --- + --- ...
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2257
		  2    3
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2258
      where:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2259
	     u = x - 1    and: x < 1
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2260
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2261
     Now we use modified taylor, which converges faster:
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2262
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2263
		   1+y        1   1       1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2264
	ln(x) = ln --- = 2y ( - + - y^2 + - y^4 + ....)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2265
		   1-y        1   3       5
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2266
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2267
	where y = (x-1) / (x+1)  and x > 0
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2268
    "
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2269
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2270
    |denominator approx y y2 exp delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2271
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2272
    self <= 0 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2273
	^ self class
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2274
	    raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2275
	    receiver:self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2276
	    selector:#ln
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2277
	    arguments:#()
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2278
	    errorString:'bad receiver in ln'
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2279
    ].
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2280
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2281
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2282
    y := (self - 1)/(self + 1).
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2283
    exp := y2 := y * y.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2284
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2285
    approx := 1.
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2286
    denominator := 3.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2287
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2288
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2289
	delta := exp / denominator.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2290
	approx := approx + delta.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2291
	exp := exp * y2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2292
	denominator := denominator + 2.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2293
    ] doUntil:[delta <= epsilon].
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2294
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2295
    ^ y * 2 * approx.
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2296
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2297
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2298
    "
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2299
     2.0 ln                         0.693147
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2300
     2.0q ln                        0.693147181
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2301
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2302
     2.0q ln_withAccuracy:1         0.691358025
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2303
     2.0q ln_withAccuracy:0.1       0.691358025
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2304
     2.0q ln_withAccuracy:0.01      0.693004115
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2305
     2.0q ln_withAccuracy:0.0000001 0.69314718
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2306
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2307
     2.0q ln_withAccuracy:1e-10
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2308
     2.0q ln_withAccuracy:1e-20
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2309
     2.0q ln_withAccuracy:1e-40     0.693147181
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2310
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2311
     2 ln_withAccuracy:1e-40
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2312
     0 ln_withAccuracy:1e-40
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2313
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2314
     (2 ln_withAccuracy:1e-100) asFixedPoint:100
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2315
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2316
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2317
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2318
sin_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2319
    "compute the sine of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2320
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2321
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2322
    "/               x^3   x^5   x^7
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2323
    "/  sin(x) = x - --- + --- - --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2324
    "/                3!!    5!!    7!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2325
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2326
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2327
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2328
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2329
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2330
    num := (x2 * self) negated.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2331
    den := 2*3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2332
    facN := 3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2333
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2334
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2335
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2336
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2337
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2338
	num := (num * x2) negated.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2339
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2340
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2341
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2342
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2343
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2344
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2345
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2346
     1.0 sin                                    0.841471
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2347
     1.0q sin                        0.841470985
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2348
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2349
     1.0q sin_withAccuracy:1         0.833333333
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2350
     1.0q sin_withAccuracy:0.1       0.841666667
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2351
     1.0q sin_withAccuracy:0.01      0.841666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2352
     1.0q sin_withAccuracy:0.001     0.841468254
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2353
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2354
     1.0q sin_withAccuracy:1e-40     0.841470985
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2355
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2356
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2357
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2358
sinh_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2359
    "compute the hyperbolic sine of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2360
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2361
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2362
    "/               x^3   x^5   x^7
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2363
    "/ sinh(x) = x + --- + --- + --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2364
    "/                3!!    5!!    7!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2365
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2366
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2367
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2368
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2369
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2370
    num := x2 * self.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2371
    den := 2*3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2372
    facN := 3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2373
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2374
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2375
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2376
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2377
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2378
	num := num * x2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2379
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2380
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2381
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2382
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2383
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2384
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2385
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2386
     1.0 sinh                                    1.1752
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2387
     1q sinh                        1.17520119
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2388
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2389
     1q sinh_withAccuracy:1         1.16666667
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2390
     1q sinh_withAccuracy:0.1       1.175
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2391
     1q sinh_withAccuracy:0.01      1.175
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2392
     1q sinh_withAccuracy:0.001     1.17519841
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2393
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2394
     1q sinh_withAccuracy:1e-40     1.17520119
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2395
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2396
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2397
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2398
sqrt_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2399
    "compute square root of the receiver using newtom/heron algorithm"
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2400
    "
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2401
      Use the Heron algorithm:
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2402
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2403
		 x_n + (a / x_n)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2404
	x_n+1 =  ---------------
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2405
		      2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2406
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2407
	sqrt(a) = x_n
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2408
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2409
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2410
    |approx|
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2411
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2412
    self <= 0 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2413
	self = 0 ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2414
	    ^ self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2415
	].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2416
	^ self class
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2417
	    raise:#imaginaryResultSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2418
	    receiver:self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2419
	    selector:#sqrt
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2420
	    arguments:#()
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2421
	    errorString:'bad (negative) receiver in sqrt'
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2422
    ].
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2423
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2424
    approx := 1.
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2425
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2426
	|lastApprox|
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2427
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2428
	lastApprox := approx.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2429
	approx := ((self / approx) + approx) / 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2430
	(approx - lastApprox) abs > epsilon
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2431
    ] whileTrue.
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2432
    ^ approx
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2433
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2434
    "
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2435
     2 sqrt                                  1.4142135623731
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2436
     2q sqrt                                 1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2437
     2q sqrt_withAccuracy:0.01               1.414215686274509804
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2438
     2q sqrt_withAccuracy:0.0001             1.414213562374689911
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2439
     2q sqrt_withAccuracy:0.0000001          1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2440
     2q sqrt_withAccuracy:0.0000000001       1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2441
     2q sqrt_withAccuracy:0.000000000001     1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2442
     2q sqrt_withAccuracy:LongFloat epsilon  1.414213562373095049
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2443
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2444
     (4 sqrt_withAccuracy:Integer epsilon) asFloat
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2445
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2446
     MessageTally spyOn:[ |arg|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2447
	arg := 2 asLongFloat.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2448
	1000000 timesRepeat:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2449
	     arg sqrt_withAccuracy:0.000000000001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2450
	]
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2451
     ]
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2452
     Time millisecondsToRun:[ |arg|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2453
	arg := 2 asLongFloat.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2454
	1000000 timesRepeat:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2455
	     arg sqrt_withAccuracy:0.000000000001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2456
	]
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2457
     ]
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2458
    "
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2459
!
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2460
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2461
tan_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2462
    "compute the tangens of the receiver using a taylor series approx."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2463
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2464
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2465
    "/                x^3     x^5      x^7      x^9     2^2n * ( 2^2n - 1) * B2n * x^(2n-1)
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2466
    "/    tan = x + 1*--- + 2*--- + 17*--- + 62*----... ----------------------------------...
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2467
    "/                 3       15      315      2835                 (2n)!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2468
    "/ where Bi is the ith bernoulli number.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2469
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2470
    |factors idx x2 num t approx lastApprox delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2471
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2472
    "/    (1 to:20) collect:[:n| |num den|
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2473
    "/        num := (2 raisedTo:(2*n)) * ((2 raisedTo:(2*n))-1) * ((n*2) bernoulli).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2474
    "/        den := (2*n) factorial.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2475
    "/        num / den
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2476
    "/    ]
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2477
   factors := #(
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2478
	(1 3)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2479
	(2 15)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2480
	(17 315)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2481
	(62 2835)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2482
	(1382 155925)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2483
	(21844 6081075)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2484
	(929569 638512875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2485
	(6404582 10854718875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2486
	(443861162 1856156927625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2487
	(18888466084 194896477400625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2488
	(113927491862 2900518163668125)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2489
	(58870668456604 3698160658676859375)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2490
	(8374643517010684 1298054391195577640625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2491
	(689005380505609448 263505041412702261046875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2492
	(129848163681107301953 122529844256906551386796875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2493
	(1736640792209901647222 4043484860477916195764296875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2494
	(418781231495293038913922 2405873491984360136479756640625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2495
	(56518638202982204522669764 801155872830791925447758961328125)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2496
	(32207686319158956594455462 1126482925555250126673224649609375)).
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2497
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2498
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2499
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2500
    num := x2 * self.               "/ =  x^3
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2501
    approx := self + (num / 3).     "/ do the first iteration
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2502
    lastApprox := self.
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2503
    idx := 2.
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2504
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2505
	t := factors at:idx ifAbsent:[].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2506
	t isNil ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2507
	    self error:'too many iterations'.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2508
"/ Not enough bernoulli numbers for now...
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2509
"/            |tempNum tempDen|
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2510
"/            tempNum := 2 raisedTo:(2*idx).
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2511
"/            tempNum := tempNum * (tempNum-1) * ((2*idx) bernoulli).
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2512
"/            tempDen := (2*idx) factorial.
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2513
"/            t := Array with:tempNum with:tempDen.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2514
	].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2515
	idx := idx + 1.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2516
	num := num * x2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2517
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2518
	delta := num * t first / t second.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2519
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2520
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2521
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2522
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2523
    "
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2524
     0.5 tan                         0.546302
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2525
     0.5q tan                        0.54630249
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2526
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2527
     0.5q tan_withAccuracy:1         0.541666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2528
     0.5q tan_withAccuracy:0.1       0.541666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2529
     0.5q tan_withAccuracy:0.01      0.545833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2530
     0.5q tan_withAccuracy:0.001     0.54625496
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2531
     0.5q tan_withAccuracy:1e-15     0.54630249
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2532
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2533
     0.5q tan_withAccuracy:1e-40     -- too many iterations
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2534
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2535
! !
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2536
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2537
!Number methodsFor:'testing'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2538
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2539
even
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2540
    "return true if the receiver is divisible by 2."
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2541
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2542
    self fractionPart = 0 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2543
	^ (self / 2) fractionPart = 0
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2544
    ].
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2545
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2546
    "this will raise an error"
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2547
    ^ super even
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2548
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2549
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2550
	2 even
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2551
	2.0 even
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2552
	3.0 even
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2553
	2.4 even
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2554
	(5/3) even
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2555
	2 asFraction even
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2556
    "
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2557
!
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2558
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2559
isDivisibleBy:aNumber
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2560
    "return true, if the receiver can be divided by the argument, aNumber without a remainder.
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2561
     Notice, that the result is only worth trusting, if the receiver is an integer."
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2562
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2563
    aNumber = 0 ifTrue: [^ false].
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2564
    aNumber isInteger ifFalse: [^ false].
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2565
    ^ (self \\ aNumber) = 0
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2566
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2567
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2568
     3 isDivisibleBy:2
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2569
     4 isDivisibleBy:2
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2570
     4.0 isDivisibleBy:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2571
     4.5 isDivisibleBy:4.5
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2572
     4.5 isDivisibleBy:1.0
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2573
    "
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2574
!
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2575
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2576
isNaN
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2577
    "return true, if the receiver is an invalid float (NaN - not a number)."
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2578
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2579
    ^ false
6155
00eaf2fa55bc isReal comment
Claus Gittinger <cg@exept.de>
parents: 6154
diff changeset
  2580
00eaf2fa55bc isReal comment
Claus Gittinger <cg@exept.de>
parents: 6154
diff changeset
  2581
    "Created: / 5.11.2001 / 18:07:26 / cg"
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2582
!
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2583
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2584
isNumber
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2585
    "return true, if the receiver is a kind of number"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2586
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2587
    ^ true
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2588
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2589
19136
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2590
isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2591
    "return true if I am a perfect square.
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2592
     That is a number for which the square root is an integer."
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2593
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2594
    self truncated = self ifFalse:[^ false].
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2595
    ^ self asInteger isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2596
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2597
    "
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2598
     0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2599
     0.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2600
     3 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2601
     3.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2602
     4 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2603
     4.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2604
     9 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2605
     9.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2606
    "
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2607
!
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2608
6087
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2609
isReal
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2610
    "return true, if the receiver is some kind of real number (as opposed to a complex);
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2611
     true is returned here - the method is redefined from Object."
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2612
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2613
    ^ true
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2614
!
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2615
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2616
isZero
1557
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2617
    "return true, if the receiver is zero"
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2618
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2619
    ^ self = 0
1557
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2620
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2621
    "Modified: 18.7.1996 / 12:40:49 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2622
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2623
4659
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2624
!Number methodsFor:'tracing'!
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2625
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4659
diff changeset
  2626
traceInto:aRequestor level:level from:referrer
4659
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2627
    "double dispatch into tracer, passing my type implicitely in the selector"
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2628
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4659
diff changeset
  2629
    ^ aRequestor traceNumber:self level:level from:referrer
4659
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2630
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2631
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2632
! !
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2633
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2634
!Number methodsFor:'trigonometric'!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2635
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2636
arcCos
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2637
    "return the arccosine of the receiver (in radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2638
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2639
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2640
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2641
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2642
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2643
	^ self asFloat arcCos.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2644
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2645
    "/ slow fallback
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2646
    ^ (self class pi / 2) - self arcSin
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2647
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2648
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2649
arcCosech
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2650
    "return the inverse hyperbolic cosecant of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2651
    "caveat: misnomer; should be called aCosech or arCosech"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2652
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2653
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2654
    "/ retry after converting to float
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2655
    (self isLimitedPrecisionReal not
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2656
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2657
	^ self asFloat arcCosech.
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2658
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2659
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2660
    ^ ((1 + ((self*self)+1) sqrt) / self) ln
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2661
!
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2662
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2663
arcCosh
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2664
    "return the inverse hyperbolic cosine of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2665
    "caveat: misnomer; should be called aCosh or arCosh"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2666
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2667
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2668
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2669
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2670
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2671
	^ self asFloat arcCosh.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2672
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2673
    "/ slow fallback
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2674
    ^ (self + (self*self-1) sqrt) ln.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2675
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2676
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2677
arcCoth
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2678
    "return the inverse hyperbolic cotangent of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2679
    "caveat: misnomer; should be called aCoth or arCoth"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2680
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2681
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2682
    "/ retry after converting to float
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2683
    (self isLimitedPrecisionReal not
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2684
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2685
	^ self asFloat arcCoth.
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2686
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2687
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2688
    ^ ((self+1) / (self-1)) ln / 2
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2689
!
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2690
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2691
arcSech
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2692
    "return the inverse hyperbolic secant of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2693
    "caveat: misnomer; should be called aSech or arSech"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2694
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2695
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2696
    "/ retry after converting to float
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2697
    (self isLimitedPrecisionReal not
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2698
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2699
	^ self asFloat arcSech.
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2700
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2701
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2702
    ^ ((1 + (1-(self*self)) sqrt) / self) ln
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2703
!
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2704
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2705
arcSin
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2706
    "return the arcsine of the receiver (in radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2707
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2708
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2709
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2710
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2711
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2712
	^ self asFloat arcSin.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2713
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2714
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2715
    ^ self arcSin_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2716
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2717
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2718
arcSinh
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2719
    "return the inverse hyperbolic sine of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2720
    "caveat: misnomer; should be called aSinh or arSinh"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2721
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2722
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2723
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2724
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2725
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2726
	^ self asFloat arcSinh.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2727
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2728
    "/ slow fallback
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2729
    ^ ( self + (self*self+1) sqrt ) ln
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2730
"/    ^ self arcSinh_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2731
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2732
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2733
arcTan
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2734
    "return the arctangent of the receiver (as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2735
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2736
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2737
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2738
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2739
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2740
	^ self asFloat arcTan.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2741
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2742
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2743
    ^ self arcTan_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2744
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2745
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2746
arcTan2:x
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2747
    "return atan2(self,x) (as radians)"
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2748
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2749
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2750
    "/ retry after converting to float
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2751
    (self isLimitedPrecisionReal not
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2752
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2753
	^ self asFloat arcTan2:x.
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2754
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2755
    "/ very slow fallback
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2756
    ^ self arcTan2_withAccuracy:self epsilon x:x
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2757
!
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  2758
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2759
arcTanh
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2760
    "return the inverse hyperbolic tangent of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2761
    "caveat: misnomer; should be called aTanh or arTanh"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2762
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2763
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2764
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2765
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2766
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2767
	^ self asFloat arcTanh.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2768
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2769
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2770
    ^ ((1 + self) / (1 - self)) ln / 2
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2771
    "/ s^ ((1 + self) ln / 2) - ((1 - self) ln / 2)
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2772
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2773
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2774
cos
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2775
    "return the cosine of the receiver (interpreted as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2776
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2777
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2778
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2779
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2780
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2781
	^ self asFloat cos.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2782
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2783
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2784
    ^ self cos_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2785
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2786
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2787
cosh
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2788
    "return the hyperbolic cosine of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2789
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2790
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2791
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2792
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2793
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2794
	^ self asFloat cosh.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2795
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2796
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2797
    ^ self cosh_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2798
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2799
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2800
cot
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2801
    "return the cotangent of the receiver"
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2802
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2803
    ^ 1 / self tan
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2804
!
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2805
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2806
sin
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2807
    "return the sine of the receiver (interpreted as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2808
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2809
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2810
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2811
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2812
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2813
	^ self asFloat sin.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2814
    ].
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2815
    ^ self sin_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2816
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2817
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2818
sinh
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2819
    "return the hyperbolic sine of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2820
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2821
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2822
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2823
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2824
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2825
	^ self asFloat sinh.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2826
    ].
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2827
    ^ self sinh_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2828
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2829
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2830
tan
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2831
    "return the tangens of the receiver (interpreted as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2832
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2833
    "/ slow fallback
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2834
    ^ self sin / self cos
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2835
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2836
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2837
tanh
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2838
    "return the hyperbolic tangens of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2839
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2840
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2841
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2842
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2843
    or:[self generality < 1.0 generality]) ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2844
	^ self asFloat tanh.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2845
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2846
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2847
    ^ self tanh_withAccuracy:self epsilon
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2848
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2849
"/ If a fast exp is available, the following might be better...
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2850
"/
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2851
"/    |exp nexp|
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2852
"/
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2853
"/    "/ tanh is:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2854
"/    "/      sinh(x)
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2855
"/    "/      -------
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2856
"/    "/      cosh(x)
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2857
"/    "/
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2858
"/    "/ which is:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2859
"/    "/      (exp(x) - exp(-x)) / 2
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2860
"/    "/      ----------------------
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2861
"/    "/      (exp(x) + exp(-x)) / 2
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2862
"/
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2863
"/    exp := self exp.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2864
"/    nexp := self negated exp.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2865
"/
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2866
"/    ^ (exp - nexp) / (exp + nexp)
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2867
! !
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2868
5552
31b5cc144476 category changes
Claus Gittinger <cg@exept.de>
parents: 5360
diff changeset
  2869
!Number methodsFor:'truncation & rounding'!
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2870
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2871
detentBy: detent atMultiplesOf: grid snap: snap
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2872
    "Map all values that are within detent/2 of any multiple of grid
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2873
     to that multiple.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2874
     Otherwise, if snap is true, return self, meaning that the values
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2875
     in the dead zone will never be returned.
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2876
     If snap is false, then expand the range between dead zones
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2877
     so that it covers the range between multiples of the grid,
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2878
     and scale the value by that factor."
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2879
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2880
    | r1 r2 |
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2881
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2882
    r1 := self roundTo: grid.                    "Nearest multiple of grid"
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2883
    (self roundTo: detent) = r1 ifTrue: [^ r1].  "Snap to that multiple..."
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2884
    snap ifTrue: [^ self].                       "...or return self"
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2885
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2886
    r2 := self < r1                               "Nearest end of dead zone"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2887
	    ifTrue: [r1 - (detent asFloat/2)]
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2888
	    ifFalse: [r1 + (detent asFloat/2)].
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2889
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2890
    "Scale values between dead zones to fill range between multiples"
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2891
    ^ r1 + ((self - r2) * grid asFloat / (grid - detent))
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2892
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2893
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2894
     (170 to: 190 by: 2) collect: [:a | a detentBy: 10 atMultiplesOf: 90 snap: true]
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2895
     (170 to: 190 by: 2) collect: [:a | a detentBy: 10 atMultiplesOf: 90 snap: false]
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2896
     (3.9 to: 4.1 by: 0.02) collect: [:a | a detentBy: 0.1 atMultiplesOf: 1.0 snap: true]
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2897
     (-3.9 to: -4.1 by: -0.02) collect: [:a | a detentBy: 0.1 atMultiplesOf: 1.0 snap: false]
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2898
    "
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2899
!
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  2900
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2901
fractionPart
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2902
    "return a float with value from digits after the decimal point.
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  2903
     i.e. the receiver minus its truncated value,
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  2904
     such that (self truncated + self fractionPart) = self"
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2905
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  2906
    ^ self - self truncated
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2907
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2908
    "
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2909
     1234.56789 fractionPart
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2910
     1.2345e6 fractionPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2911
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2912
     1.6 asLongFloat fractionPart + 1.6 asLongFloat truncated
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2913
     -1.6 asLongFloat fractionPart + -1.6 asLongFloat truncated
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2914
    "
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2915
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2916
    "Modified: / 4.11.1996 / 20:26:54 / cg"
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2917
    "Created: / 28.10.1998 / 17:14:40 / cg"
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2918
!
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2919
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2920
integerPart
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2921
    "return a float with value from digits before the decimal point
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2922
     (i.e. the truncated value)"
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2923
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2924
    ^ self truncated asFloat
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2925
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2926
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2927
     1234.56789 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2928
     1.2345e6 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2929
     12.5 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2930
     -12.5 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2931
     (5/3) integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2932
     (-5/3) integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2933
     (5/3) truncated
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2934
     (-5/3) truncated
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2935
    "
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2936
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2937
    "Created: / 28.10.1998 / 17:14:56 / cg"
6154
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  2938
    "Modified: / 5.11.2001 / 17:54:22 / cg"
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2939
! !
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  2940
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
  2941
!Number class methodsFor:'documentation'!
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2942
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2943
version
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  2944
    ^ '$Header$'
12112
949f9713c4a5 changed: #readFrom:decimalPointCharacters:onError:
Claus Gittinger <cg@exept.de>
parents: 11944
diff changeset
  2945
!
949f9713c4a5 changed: #readFrom:decimalPointCharacters:onError:
Claus Gittinger <cg@exept.de>
parents: 11944
diff changeset
  2946
949f9713c4a5 changed: #readFrom:decimalPointCharacters:onError:
Claus Gittinger <cg@exept.de>
parents: 11944
diff changeset
  2947
version_CVS
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  2948
    ^ '$Header$'
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2949
! !
15078
997a122ceeb5 class: Number
Stefan Vogel <sv@exept.de>
parents: 14495
diff changeset
  2950