Number.st
author Stefan Vogel <sv@exept.de>
Fri, 19 Jan 2018 10:40:29 +0100
changeset 22455 63a545a97d4a
parent 22302 cc8e3512ac18
child 22543 0e18000866a1
permissions -rw-r--r--
add class: CharacterEncoderImplementations::VariableBytesEncoder
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.
22043
56a894e6e543 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21992
diff changeset
   306
            self isAbstract ifTrue:[
56a894e6e543 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21992
diff changeset
   307
                value := 0.0.
56a894e6e543 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21992
diff changeset
   308
            ] ifFalse:[    
56a894e6e543 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21992
diff changeset
   309
                value := self zero. "/ 0.0.
56a894e6e543 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21992
diff changeset
   310
            ].
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   311
            intValue := 0.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   312
        ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   313
            value := Integer readFrom:str radix:10.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   314
            nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   315
            ((nextChar == $r) or:[ nextChar == $R]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   316
                str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   317
                radix := value.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   318
                value := Integer readFrom:str radix:radix.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   319
                nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   320
            ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   321
                radix := 10
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   322
            ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   323
            intValue := value.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   324
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   325
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   326
        (self == Integer or:[self inheritsFrom:Integer]) ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   327
            (decimalPointCharacters includes:nextChar) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   328
                str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   329
                nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   330
                decimalMantissa := 0.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   331
                (nextChar notNil and:[nextChar isDigitRadix:radix]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   332
                    |mantissa|
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   333
                    mantissaAndScale := self readMantissaAndScaleFrom:str radix:radix.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   334
                    mantissa := mantissaAndScale first.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   335
                    value := (mantissa coerce:value) + mantissa.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   336
                    nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   337
                ]
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   338
            ].
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   339
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   340
            ('eEdDqQfF' includes:nextChar) ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   341
                expChar := nextChar.
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   342
                str next.
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   343
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   344
                nextChar := str peekOrNil.
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   345
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   346
                signExp := 1.
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
                ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   351
                    (nextChar == $-) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   352
                        str next.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   353
                        nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   354
                        signExp := -1
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   355
                    ]
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   356
                ].
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   357
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   358
                "/ if I am abstract (i.e. I am Number or LPReal),
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   359
                "/ let the exponent-character decide what kind of float we get:
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   360
                "/      qQ   -> LongFloat
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   361
                "/      eEdD -> Float      (which is iee-double)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   362
                "/      fF   -> ShortFloat (which is iee-float)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   363
                
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   364
                self isAbstract ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   365
                    ('qQ' includes:expChar) ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   366
                        value := value asLongFloat.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   367
                    ] ifFalse:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   368
                        ('fF' includes:expChar) ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   369
                            value := value asShortFloat.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   370
                        ] ifFalse:[    
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   371
                            "/ 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
   372
                            "/ and only produce doubles on dD.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   373
                            "/ (for now, always create Doubles for Dolphin, Squeak etc. compatibility)
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   374
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   375
                            false "('eE' includes:expChar)" ifTrue:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   376
                                value := value asShortFloat
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   377
                            ] ifFalse:[
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   378
                                value := value asFloat.
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   379
                            ].    
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   380
                        ].    
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
                ] ifFalse:[
21871
2e74148f065b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21839
diff changeset
   383
                    value := self coerce:value.
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   384
                ].
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   385
                
21634
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   386
                (nextChar notNil and:[(nextChar isDigitRadix:radix)]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   387
                    exp := (Integer readFrom:str radix:radix) * signExp.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   388
                    value := value * ((value class unity * 10.0) raisedToInteger:exp)
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
            ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   391
                ('sS' includes:nextChar) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   392
                    str next.
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
                    nextChar := str peekOrNil.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   395
                    (nextChar notNil and:[ nextChar isDigit]) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   396
                        scale := (Integer readFrom:str).
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   397
                    ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   398
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   399
                    mantissaAndScale isNil ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   400
                        value := intValue asFixedPoint:(scale ? 0).
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   401
                    ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   402
                        denom := 10 raisedTo:mantissaAndScale last.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   403
                        value := FixedPoint
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   404
                                    numerator:(intValue * denom) + (mantissaAndScale second)
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   405
                                    denominator:denom
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   406
                                    scale:(scale ? mantissaAndScale third).
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   407
                    ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   408
                ] ifFalse:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   409
                    (self inheritsFrom:LimitedPrecisionReal) ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   410
                        "when requesting a specific Float instance, coerce it.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   411
                         otherwise return a value without loosing precision"
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   412
                        value := self coerce:value.
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   413
                    ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   414
                ].
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
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   417
        sign == -1 ifTrue:[
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   418
            value := value negated
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   419
        ].
312cdb36acc9 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21536
diff changeset
   420
        value.
6632
65014fd967d9 Avoid creation of block in #readFrom:onError:
Stefan Vogel <sv@exept.de>
parents: 6584
diff changeset
   421
    ] on:Error do:exceptionBlock
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   422
329
claus
parents: 325
diff changeset
   423
    "
21815
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   424
     Number readFrom:(ReadStream on:'54.32e-01') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   425
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   426
     Number readFrom:(ReadStream on:'12345') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   427
     Number readFrom:(ReadStream on:'12345.0') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   428
     
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   429
     Number readFrom:(ReadStream on:'12345.0f') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   430
     Number readFrom:(ReadStream on:'12345.0e') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   431
     Number readFrom:(ReadStream on:'12345.0q') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   432
     Number readFrom:(ReadStream on:'12345.0d') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   433
     Number readFrom:(ReadStream on:'12345.0s') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   434
     Number readFrom:(ReadStream on:'12345.01s') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   435
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   436
     Float readFrom:(ReadStream on:'12345') decimalPointCharacters:'.' onError:[self halt].
e017f9904c30 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21812
diff changeset
   437
     
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   438
     Number readFrom:(ReadStream on:'12345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   439
     Number readFrom:(ReadStream on:'12345678901234567890.0')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   440
     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   441
     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   442
     Number readFrom:'16rAAAAFFFFAAAAFFFF'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   443
     Number readFrom:'0.000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   444
     '+00000123.45' asNumber
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:'(1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   448
     Number readFrom:'-(1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   449
     Number readFrom:'-(-1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   450
     Number readFrom:'(-1/3'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   451
     Number readFrom:'99s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   452
     Number readFrom:'99.00s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   453
     Number readFrom:'99.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   454
     Number readFrom:'.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   455
     Number readFrom:'.0000000q'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   456
     Number readFrom:'.0000000f'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   457
     Number readFrom:'.0000000e'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   458
     Number readFrom:'.0000000s1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   459
     Number readFrom:'.0000000q1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   460
     Number readFrom:'.0000000f1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   461
     Number readFrom:'.0000000e1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   462
     LongFloat readFrom:'.00000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   463
     Number readFrom:'.00000000000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   464
     Number readFrom:'.001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   465
     ShortFloat readFrom:'.001'
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   466
     Number readFrom:'123garbage'      -> returns 123
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   467
     Number fromString:'123garbage'    -> raises an error
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   468
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   469
     DecimalPointCharactersForReading := #( $. $, ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   470
     Number readFrom:'99,00'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   471
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   472
     DecimalPointCharactersForReading := #( $. ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   473
     Number readFrom:'99,00'
329
claus
parents: 325
diff changeset
   474
    "
569
7134eb78cf48 readFrom:onError: can now also read from a string
Claus Gittinger <cg@exept.de>
parents: 530
diff changeset
   475
22043
56a894e6e543 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21992
diff changeset
   476
    "Modified: / 17-07-2017 / 15:18:03 / cg"
296
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   477
!
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   478
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   479
readFrom:aStringOrStream onError:exceptionBlock
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   480
    "return the next Number from the (character-)stream aStream;
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   481
     skipping all whitespace first; return the value of exceptionBlock,
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   482
     if no number can be read.
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   483
     This method is less strict than the smalltalk number reader; it
17057
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   484
     allows for prefixed + and also allows missing fractional part after eE.
08f275c70437 class: Number
Claus Gittinger <cg@exept.de>
parents: 17056
diff changeset
   485
     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
   486
     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
   487
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   488
    ^ self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   489
	readFrom:aStringOrStream
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   490
	decimalPointCharacters:(self decimalPointCharactersForReading)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   491
	onError:exceptionBlock
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   492
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   493
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   494
     Number readFrom:(ReadStream on:'54.32e-01')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   495
     Number readFrom:(ReadStream on:'12345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   496
     Number readFrom:(ReadStream on:'12345678901234567890.0')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   497
     Number readFrom:(ReadStream on:'12345678901234567890.012345678901234567890')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   498
     Number readFrom:(ReadStream on:'16rAAAAFFFFAAAAFFFF')
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   499
     Number readFrom:'16rAAAAFFFFAAAAFFFF'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   500
     Number readFrom:'0.000001'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   501
     '+00000123.45' asNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   502
     Number readFrom:'99s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   503
     Number readFrom:'99.00s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   504
     Number readFrom:'99.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   505
     Number readFrom:'.0000000s'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   506
     Number readFrom:'.0000000q'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   507
     Number readFrom:'.0000000f'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   508
     Number readFrom:'.0000000e'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   509
     Number readFrom:'.0000000s1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   510
     Number readFrom:'.0000000q1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   511
     Number readFrom:'.0000000f1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   512
     Number readFrom:'.0000000e1'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   513
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   514
     DecimalPointCharactersForReading := #( $. $, ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   515
     Number readFrom:'99,00'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   516
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   517
     DecimalPointCharactersForReading := #( $. ).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   518
     Number readFrom:'99,00'
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   519
    "
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   520
!
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   521
296
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   522
readSmalltalkSyntaxFrom:aStream
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   523
    "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
   524
     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
   525
     (character-) aStream.
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   526
     Returns nil if aStream contains no valid number."
329
claus
parents: 325
diff changeset
   527
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   528
    ^ self readSmalltalkSyntaxFrom:aStream onError:nil.
296
754358c5508a *** empty log message ***
claus
parents: 293
diff changeset
   529
329
claus
parents: 325
diff changeset
   530
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   531
     Number readSmalltalkSyntaxFrom:'99d'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   532
     Number readSmalltalkSyntaxFrom:'99.00d'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   533
     Number readSmalltalkSyntaxFrom:'54.32e-01'
15078
997a122ceeb5 class: Number
Stefan Vogel <sv@exept.de>
parents: 14495
diff changeset
   534
     Number readSmalltalkSyntaxFrom:'12345678901234567890'
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   535
     Number readSmalltalkSyntaxFrom:'16rAAAAFFFFAAAAFFFF'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   536
     Number readSmalltalkSyntaxFrom:'foobar'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   537
     Number readSmalltalkSyntaxFrom:'(1/10)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   538
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   539
     Number readSmalltalkSyntaxFrom:'(1/0)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   540
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   541
     Number readFrom:'(1/3)'
15078
997a122ceeb5 class: Number
Stefan Vogel <sv@exept.de>
parents: 14495
diff changeset
   542
     Number readFrom:'(-1/3)'
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   543
     Number readFrom:'-(1/3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   544
     Number readFrom:'(1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   545
     Number readFrom:'(-1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   546
     Number readFrom:'-(-1/-3)'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   547
     Number readSmalltalkSyntaxFrom:'+00000123.45'
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   548
     Number readFrom:'+00000123.45'
5013
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   549
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   550
     |s|
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   551
     s := ReadStream on:'2.'.
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   552
     Number readSmalltalkSyntaxFrom:s.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   553
     s next
5013
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   554
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   555
     |s|
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   556
     s := ReadStream on:'2.0.'.
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   557
     Number readSmalltalkSyntaxFrom:s.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   558
     s next
329
claus
parents: 325
diff changeset
   559
    "
3613
75629df7f224 fixed readSmalltalkSyntax (dont read behind number)
Claus Gittinger <cg@exept.de>
parents: 3394
diff changeset
   560
5013
e2aff65e6eba comment
Claus Gittinger <cg@exept.de>
parents: 4988
diff changeset
   561
    "Modified: / 19.11.1999 / 18:26:47 / cg"
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   562
!
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   563
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   564
readSmalltalkSyntaxFrom:aStream onError:errorValue
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   565
    "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
   566
     read and return the next Number in smalltalk syntax from the
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   567
     (character-) aStream.
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   568
     Returns nil if aStream contains no valid number."
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   569
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   570
    |n|
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   571
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   572
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   573
	n := Scanner scanNumberFrom:aStream.
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   574
    ] on:Error do:[:ex|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   575
	n := nil
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   576
    ].
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   577
    n isNil ifTrue:[^ errorValue value].
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   578
    ^ n
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   579
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   580
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   581
     Number readSmalltalkSyntaxFrom:'foo' onError:123
15776
e7f5200ad493 class: Number
Claus Gittinger <cg@exept.de>
parents: 15595
diff changeset
   582
    "
1
a27a279701f8 Initial revision
claus
parents:
diff changeset
   583
! !
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   584
17686
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   585
!Number class methodsFor:'Compatibility-VW'!
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   586
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   587
readIntegerFrom:aStream radix:radix
21789
abf8de4b8720 #DOCUMENTATION by mawalch
mawalch
parents: 21634
diff changeset
   588
    "for VisualWorks compatibility"
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
    ^ Integer readFrom:aStream radix:radix
21789
abf8de4b8720 #DOCUMENTATION by mawalch
mawalch
parents: 21634
diff changeset
   591
abf8de4b8720 #DOCUMENTATION by mawalch
mawalch
parents: 21634
diff changeset
   592
    "Modified (comment): / 08-06-2017 / 13:58:36 / mawalch"
17686
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   593
! !
f3233f56df6f class: Number
Claus Gittinger <cg@exept.de>
parents: 17469
diff changeset
   594
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   595
!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
   596
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   597
e
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   598
    "return the closest approximation of the irrational number e"
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
    ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   601
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   602
    "Modified: / 16-06-2017 / 11:04:49 / cg"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   603
!
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
epsilon
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   606
    "return the maximum relative spacing of instances of mySelf
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   607
     (i.e. the value-delta of the least significant bit)"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   608
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   609
     ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   610
!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   611
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   612
epsilonForCloseTo
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   613
    "return the epsilon used in the closeTo: comparison.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   614
     (useful would be something like self epsilon or epsilon*10,
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   615
      but for Squeak compatibility.... - sigh)"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   616
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   617
    ^ 0.0001
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   618
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   619
    "
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   620
     Float epsilon
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   621
     ShortFloat epsilon
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   622
     Float epsilon10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   623
     ShortFloat epsilon10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   624
    "
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
21930
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   627
i
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   628
    "return the imaginary unit i"
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   629
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   630
    
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   631
    ^ Complex real:0 imaginary:1
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   632
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   633
    "
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
   634
     1 + Number i          -> (1+1i)
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
   635
     Number i + 10         -> (10+1i)
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
   636
     Number i * Number i   -> -1
21930
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   637
    "
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   638
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   639
    "Created: / 01-07-2017 / 19:44:53 / cg"
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
   640
    "Modified (comment): / 22-09-2017 / 09:53:14 / cg"
21930
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   641
!
a892609c4586 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21916
diff changeset
   642
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   643
ln10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   644
    "return ln(10) in my representation (and accuracy)."
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   645
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   646
    ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   647
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   648
    "Created: / 16-06-2017 / 11:00:38 / cg"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   649
!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   650
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   651
pi
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   652
    "return Pi in my representation (and accuracy)."
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   653
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   654
    ^ self subclassResponsibility
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   655
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   656
    "Modified (format): / 16-06-2017 / 11:00:42 / cg"
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   657
! !
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   658
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   659
!Number class methodsFor:'constants & defaults'!
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   660
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   661
decimalPointCharacter
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   662
    "printed"
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   663
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   664
    <resource: #obsolete>
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   665
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   666
    ^ self decimalPointCharacterForPrinting
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   667
!
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   668
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   669
decimalPointCharacter:aCharacter
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   670
    "printed"
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   671
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   672
    <resource: #obsolete>
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
    self decimalPointCharacterForPrinting:aCharacter
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   675
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   676
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   677
     1.5 printString
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   678
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   679
     Number decimalPointCharacter:$,.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   680
     1.5 printString
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   681
     Number decimalPointCharacter:$..
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   682
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   683
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   684
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   685
decimalPointCharacterForPrinting
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   686
    "printed"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   687
16267
beef1cb9c801 class: Number
Claus Gittinger <cg@exept.de>
parents: 16070
diff changeset
   688
    ^ DecimalPointCharacterForPrinting ? $.
9127
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
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   691
decimalPointCharacterForPrinting:aCharacter
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   692
    "printed"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   693
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   694
    DecimalPointCharacterForPrinting := aCharacter
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   695
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   696
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   697
     1.5 printString
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   698
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   699
     Number decimalPointCharacterForPrinting:$,.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   700
     1.5 printString
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   701
     Number decimalPointCharacterForPrinting:$..
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   702
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   703
!
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   704
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   705
decimalPointCharacters
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   706
    "accepted when converting from a string"
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
   707
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   708
    <resource: #obsolete>
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
    ^ self decimalPointCharactersForReading
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   711
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   712
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   713
     1.5 printString
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   714
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   715
     Number decimalPointCharacters:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   716
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   717
     Number fromString:'1,5'.
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   718
     Number decimalPointCharacters:#( $. ).
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   719
    "
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   720
!
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   721
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   722
decimalPointCharacters:aCollectionOfCharacters
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   723
    "accepted when converting from a string"
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   724
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   725
    <resource: #obsolete>
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   726
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   727
    self decimalPointCharactersForReading:aCollectionOfCharacters
9127
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
     Number decimalPointCharacters:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   731
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   732
     Number fromString:'1,5'.
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   733
     Number decimalPointCharacters:#( $. ).
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   734
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   735
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   736
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   737
decimalPointCharactersForReading
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   738
    "default when converting from a string"
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   739
9333
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   740
    "/ cg: changing the default leads to trouble in some
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   741
    "/ language processors (PrologScanner...)
c1d712705426 decimalPointCharacter stuff
Claus Gittinger <cg@exept.de>
parents: 9274
diff changeset
   742
    "/ 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
   743
    "/ BETTER: pass the DecimalPointCharacterSet explicitly
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   744
    DecimalPointCharactersForReading isNil ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   745
	^ #( $. )
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   746
    ].
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   747
    ^ DecimalPointCharactersForReading
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   748
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   749
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   750
     1.5 printString
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   751
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   752
     Number decimalPointCharactersForReading:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   753
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   754
     Number fromString:'1,5'.
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   755
     Number decimalPointCharactersForReading:#( $. ).
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   756
    "
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   757
!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   758
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   759
decimalPointCharactersForReading:aCollectionOfCharacters
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   760
    "accepted when converting from a string"
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   761
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
   762
    DecimalPointCharactersForReading := aCollectionOfCharacters
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   763
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   764
    "
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   765
     Number decimalPointCharactersForReading:#( $. $,) .
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   766
     Number fromString:'1.5'.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   767
     Number fromString:'1,5'.
9274
f3b231fb2ef7 comments
Claus Gittinger <cg@exept.de>
parents: 9140
diff changeset
   768
     Number decimalPointCharactersForReading:#( $. ).
8303
837daadaab78 decimalPointCharacter definition
werner
parents: 8301
diff changeset
   769
    "
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   770
! !
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
   771
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
   772
!Number class methodsFor:'error reporting'!
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   773
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   774
raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel arg:arg errorString:text
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   775
    "ST-80 compatible signal raising. Provided for PD numeric classes"
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   776
4558
94044dccefab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3995
diff changeset
   777
    <context: #return>
94044dccefab checkin from browser
Claus Gittinger <cg@exept.de>
parents: 3995
diff changeset
   778
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   779
    ^ self
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   780
	raise:aSignalSymbolOrErrorClass
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   781
	receiver:someNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   782
	selector:sel
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   783
	arguments:(Array with:arg)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   784
	errorString:text
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   785
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   786
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   787
     Number
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   788
	raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   789
	receiver:1.0
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   790
	selector:#sin
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   791
	arg:nil
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   792
	errorString:'foo bar test'
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   793
    "
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   794
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   795
    "Modified: / 16.11.2001 / 14:12:50 / cg"
3394
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   796
!
33e8273b95f3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 3375
diff changeset
   797
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   798
raise:aSignalSymbolOrErrorClass receiver:someNumber selector:sel errorString:text
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   799
    "ST-80 compatible signal raising. Provided for PD numeric classes.
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   800
     aSignalSymbolOrErrorClass is either an Error-subclass, or
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   801
     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
   802
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   803
    <context: #return>
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   804
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   805
    ^ self
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   806
	raise:aSignalSymbolOrErrorClass
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   807
	receiver:someNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   808
	selector:sel
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   809
	arguments:#()
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   810
	errorString:text
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   811
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   812
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   813
     Number
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   814
	raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   815
	receiver:1.0
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   816
	selector:#foo
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   817
	errorString:'foo bar test'
6195
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   818
    "
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   819
9e60c38d1d61 #raise:receiver:selector...
Claus Gittinger <cg@exept.de>
parents: 6194
diff changeset
   820
    "Modified: / 16.11.2001 / 14:13:16 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   821
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   822
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   823
!Number class methodsFor:'misc'!
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   824
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   825
displayRadix:aNumber
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   826
    "being tired of always sending #printStringRadix: in the inspectors,
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   827
     this allows you to change the default print radix for the displayString
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   828
     method."
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   829
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   830
    DefaultDisplayRadix := aNumber
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   831
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   832
    "
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   833
     Integer displayRadix:16. 123456 inspect
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   834
     Integer displayRadix:10. 123456 inspect
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   835
    "
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   836
! !
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
   837
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
   838
!Number class methodsFor:'private'!
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   839
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   840
readMantissaAndScaleFrom:aStream radix:radix
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   841
    "helper for readFrom: -
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   842
     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
   843
     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
   844
     (both to support reading fixedPoint numbers and to not loose precision).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   845
     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
   846
     No whitespace is skipped.
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
   847
     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
   848
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   849
    |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
   850
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   851
    value := 0.0.
10320
a573647dad4f avoid longfloats if possible
Claus Gittinger <cg@exept.de>
parents: 10191
diff changeset
   852
    factor := 1.0 / radix.
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   853
    self isAbstract ifFalse:[    
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   854
        value := self zero.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   855
        factor := self unity / (self coerce:radix).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   856
    ].
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   857
    scale := 0.
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   858
    scaleFactor := 1.
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   859
    intMantissa := 0.
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   860
    nextChar := aStream peekOrNil.
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   861
    [nextChar notNil and:[nextChar isDigitRadix:radix]] whileTrue:[
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   862
        digit := nextChar digitValue.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   863
        scaleFactor := scaleFactor * radix.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   864
        value := value + (digit * factor).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   865
        intMantissa := (intMantissa * radix) + digit.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   866
        factor := factor / radix.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   867
        scale := scale + 1.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   868
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   869
        (scale > 6 and:[self isAbstract]) ifTrue:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   870
            factor := factor asLongFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   871
            value := value asLongFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   872
        ].
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   873
        aStream next.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   874
        nextChar := aStream peekOrNil
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   875
    ].
7388
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
   876
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   877
    self isAbstract ifFalse:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   878
        xvalue := (self coerce:intMantissa) / (self coerce:scaleFactor).
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   879
    ] ifTrue:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   880
        scale > 6 ifTrue:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   881
            xvalue := intMantissa asLongFloat / scaleFactor asLongFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   882
        ] ifFalse:[
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   883
            xvalue := intMantissa asFloat / scaleFactor asFloat.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   884
        ].
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   885
    ].    
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   886
    ^ (Array with:xvalue with:intMantissa with:scale).
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   887
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   888
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   889
     Number readMantissaAndScaleFrom:'234'    readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   890
     Number readMantissaAndScaleFrom:'2'      readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   891
     Number readMantissaAndScaleFrom:'234567' readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   892
     Number readMantissaAndScaleFrom:'234000' readStream radix:10.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   893
     Number readMantissaAndScaleFrom:'234'    readStream radix:10.
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   894
     Number readMantissaAndScaleFrom:'000234' readStream radix:10.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   895
     Number readMantissaAndScaleFrom:'000000000000000000000000000024' readStream radix:10.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   896
     Number readMantissaAndScaleFrom:'123456789012345678901234567890' readStream radix:10.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   897
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   898
     Number readMantissaAndScaleFrom:'12345678901234567890' readStream radix:10.
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   899
    "
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   900
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
   901
    "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
   902
!
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   903
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   904
readMantissaFrom:aStream radix:radix
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   905
    "helper for readFrom: -
6692
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   906
     return the mantissa (post-decimal-point digits)
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   907
     from the (character-)stream aStream;
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   908
     No whitespace is skipped.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   909
     Errs if no number available."
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   910
6899
9ed8494c9f10 support for fixedPoint numbers (s-exponentCharacter)
Claus Gittinger <cg@exept.de>
parents: 6702
diff changeset
   911
    ^ (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
   912
6692
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   913
    "
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   914
     Number readMantissaFrom:'234'    readStream radix:10.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   915
     Number readMantissaFrom:'2'      readStream radix:10.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   916
     Number readMantissaFrom:'234567' readStream radix:10.
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   917
    "
314f88dcbbd1 comment
Claus Gittinger <cg@exept.de>
parents: 6637
diff changeset
   918
3375
7c64da3964e4 faster conversion from string (due to slow #pastEnd)
Claus Gittinger <cg@exept.de>
parents: 3060
diff changeset
   919
    "Modified: / 14.4.1998 / 18:47:47 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   920
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
   921
8892
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   922
!Number class methodsFor:'queries'!
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   923
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   924
isAbstract
11224
a9a66cee404f comment
Claus Gittinger <cg@exept.de>
parents: 11136
diff changeset
   925
    "Return if this class is an abstract class.
a9a66cee404f comment
Claus Gittinger <cg@exept.de>
parents: 11136
diff changeset
   926
     True is returned for Number here; false for subclasses.
19457
8f56a5bde306 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19249
diff changeset
   927
     Abstract subclasses must redefine this again."
11224
a9a66cee404f comment
Claus Gittinger <cg@exept.de>
parents: 11136
diff changeset
   928
8892
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   929
    ^ self == Number
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   930
! !
5d05a7f150a5 +isAbstract
Claus Gittinger <cg@exept.de>
parents: 8844
diff changeset
   931
7261
f35fc9cee675 method category rename
Claus Gittinger <cg@exept.de>
parents: 7214
diff changeset
   932
!Number methodsFor:'Compatibility-Squeak'!
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   933
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   934
asSmallAngleDegrees
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   935
    "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
   936
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   937
    | pos |
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   938
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   939
    pos := self \\ 360.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   940
    pos > 180 ifTrue: [pos := pos - 360].
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   941
    ^ pos
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   942
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   943
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   944
     #(-500 -300 -150 -5 0 5 150 300 500 1200)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   945
	collect: [:n | n asSmallAngleDegrees]
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
   946
    "
6072
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
   947
!
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
   948
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   949
closeFrom:aNumber
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   950
    "are these two numbers close?"
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   951
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   952
    ^ self closeFrom:aNumber withEpsilon:(self class epsilonForCloseTo)
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   953
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   954
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   955
     9.0 closeTo: 8.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   956
     9.9 closeTo: 9
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   957
     (9/3) closeTo: 2.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   958
     1 closeTo: 0.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   959
     1 closeTo: 1.0001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   960
     1 closeTo: 1.001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   961
     1 closeTo: 0.999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   962
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   963
     0.9999 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   964
     1.0001 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   965
     1.001 closeTo: 1
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   966
     0.999 closeTo: 1
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   967
     Float NaN closeTo:Float NaN
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   968
     Float infinity closeTo:Float infinity
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   969
    "
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   970
!
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   971
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   972
closeFrom:aNumber withEpsilon:eps
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   973
    "are these two numbers close?"
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
   974
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   975
    | fuzz |
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   976
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   977
    self isNaN == aNumber isNaN ifFalse: [^ false].
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   978
    self isInfinite == aNumber isInfinite ifFalse: [^ false].
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   979
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   980
    fuzz := (self abs max:aNumber abs) * eps.
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   981
    ^ (self - aNumber) abs <= fuzz
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   982
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   983
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   984
     9.0 closeTo: 8.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   985
     9.9 closeTo: 9
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   986
     (9/3) closeTo: 2.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   987
     1 closeTo: 0.9999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   988
     1 closeTo: 1.0001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   989
     1 closeTo: 1.001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   990
     1 closeTo: 0.999
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   991
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   992
     0.9999 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   993
     1.0001 closeTo: 1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
   994
     1.001 closeTo: 1
6345
cfe5db4fe391 Only comments
Stefan Vogel <sv@exept.de>
parents: 6335
diff changeset
   995
     0.999 closeTo: 1
cfe5db4fe391 Only comments
Stefan Vogel <sv@exept.de>
parents: 6335
diff changeset
   996
     Float NaN closeTo:Float NaN
cfe5db4fe391 Only comments
Stefan Vogel <sv@exept.de>
parents: 6335
diff changeset
   997
     Float infinity closeTo:Float infinity
6335
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   998
    "
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
   999
!
8286bc57d05e closeTo: generalized for all numbers
Claus Gittinger <cg@exept.de>
parents: 6258
diff changeset
  1000
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1001
closeTo:num
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1002
    "are these two numbers close to each other?"
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1003
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1004
    ^ self closeTo:num withEpsilon:(self class epsilonForCloseTo)
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1005
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1006
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1007
     1 closeTo:1.0000000001
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1008
     1 closeTo:1.001
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1009
     1 closeTo:1.001 withEpsilon:0.001
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1010
    "
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1011
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1012
    "Created: / 5.11.2001 / 18:07:26 / cg"
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1013
!
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1014
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1015
closeTo:num withEpsilon:eps
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1016
    "are these two numbers close to each other?"
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1017
6374
fad888313ce3 closeTo: fix
Claus Gittinger <cg@exept.de>
parents: 6345
diff changeset
  1018
    num isNumber ifFalse:[^false].
10727
4e6346eb48a9 closeTo: with epsilon parameter
sr
parents: 10556
diff changeset
  1019
    ^ num closeFrom:self withEpsilon:eps
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1020
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1021
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1022
     1 closeTo:1.0000000001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1023
     1 closeTo:1.001
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1024
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1025
     1 closeTo:1.001 withEpsilon:0.1
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1026
     1 closeTo:1.201 withEpsilon:0.1
12979
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1027
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1028
     3.14 closeTo:(3.14 asFixedPoint:2)
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1029
     (3.14 asFixedPoint:2) closeTo:3.14
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1030
    "
6155
00eaf2fa55bc isReal comment
Claus Gittinger <cg@exept.de>
parents: 6154
diff changeset
  1031
12979
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1032
    "Created: / 05-11-2001 / 18:07:26 / cg"
917a726bf375 comment/format in: #closeTo:withEpsilon:
Claus Gittinger <cg@exept.de>
parents: 12762
diff changeset
  1033
    "Modified: / 02-08-2010 / 13:27:22 / cg"
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1034
!
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  1035
9139
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1036
degreeCos
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1037
    "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
  1038
9139
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1039
    ^ self degreesToRadians cos
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1040
!
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1041
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1042
degreeSin
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1043
    "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
  1044
9139
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1045
    ^ self degreesToRadians sin
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1046
!
94df665b3260 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 9138
diff changeset
  1047
11712
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1048
degreeTan
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1049
    "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
  1050
11712
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1051
    ^ self degreesToRadians tan
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1052
!
b83c3734b1ce added #degreeTan
sr
parents: 11660
diff changeset
  1053
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1054
isEqual: aNumber within: accuracy
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1055
	^(self - aNumber) abs < accuracy
17127
f2611d8d0ce0 class: Number
Claus Gittinger <cg@exept.de>
parents: 17060
diff changeset
  1056
!
f2611d8d0ce0 class: Number
Claus Gittinger <cg@exept.de>
parents: 17060
diff changeset
  1057
14495
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1058
rounded:n
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1059
    "Answer the float rounded with n digits of precision"
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1060
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1061
    | mult |
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1062
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1063
    mult := 10 raisedTo: n.
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1064
    ^ (((self * mult) rounded) asFloat / mult).
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1065
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1066
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1067
     7 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1068
     7.1 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1069
     7.2345 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1070
     7.2385 rounded:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1071
     7.2341 rounded:3
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1072
     7.2345 rounded:3
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1073
     7.2348 rounded:3
14495
d5afe5bc91f7 added: #rounded:
Claus Gittinger <cg@exept.de>
parents: 14009
diff changeset
  1074
    "
22096
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1075
!
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1076
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1077
sqrtWithErrorLessThan:epsilon
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1078
    "compute the square root, using the Newton method.
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1079
     The approximated return value has an error less than the given epsilon."
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1080
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1081
    ^ self sqrt_withAccuracy:epsilon
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1082
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1083
    "
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1084
     (2 asFixedPoint:4) sqrtWithErrorLessThan:0.001
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1085
    "
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1086
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  1087
    "Modified: / 25-07-2017 / 15:58:46 / cg"
4988
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
  1088
! !
ac426684e852 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4895
diff changeset
  1089
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1090
!Number methodsFor:'coercing & converting'!
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1091
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1092
i
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1093
    "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
  1094
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1095
    ^ Complex real:0 imaginary:self
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1096
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1097
    "
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1098
     3i     -> (0+3i)
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1099
     (1+1i) -> (1+1i)
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1100
    "
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1101
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1102
    "Modified (format): / 22-09-2017 / 09:53:27 / cg"
9127
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1103
! !
04cd80c64a30 decimapPointCharacter stuff;
Claus Gittinger <cg@exept.de>
parents: 8979
diff changeset
  1104
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1105
!Number methodsFor:'comparing'!
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1106
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1107
isAlmostEqualTo:aNumber nEpsilon:nE
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1108
    "return true, if the argument, aNumber represents almost the same numeric value
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1109
     as the receiver, false otherwise.
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1110
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1111
     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
  1112
     still be considered equal. See documentation in LimitedPrecisionReal for more detail.
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1113
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1114
     For background information why floats need this
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1115
     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
  1116
    "
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1117
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1118
    |f1 f2 diff scaledEpsilon largest|
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1119
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1120
    diff := (self - aNumber) abs.
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1121
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1122
    scaledEpsilon := nE * diff class epsilon.
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1123
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1124
    diff <= scaledEpsilon ifTrue:[
21812
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1125
        "compare for really close values near 0"
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1126
        ^ true.
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1127
    ].
21812
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1128
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1129
    "scaled comparison for larger values"
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1130
    f1 := self abs.
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1131
    f2 := aNumber abs.
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1132
    largest := f1 > f2 ifTrue:[f1] ifFalse:[f2].
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1133
    ^ (diff <= (scaledEpsilon * largest)).
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1134
4d60b6626208 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21789
diff changeset
  1135
    "Modified: / 15-06-2017 / 09:55:15 / cg"
22290
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1136
!
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1137
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1138
isAlmostEqualTo:aNumber withError:errFraction
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1139
    "return true, if the receiver,is inside the interval aNumber-err .. aNumber+err.
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1140
     Err is a fraction of 0..1."
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1141
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1142
    ^ self between:(aNumber * (1-errFraction)) and:(aNumber * (1+errFraction))
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1143
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1144
    "
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1145
     within 10%?
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1146
     10.5 isAlmostEqualTo:10 withError:0.1
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1147
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1148
     within 1%
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1149
     10.5 isAlmostEqualTo:10 withError:0.01
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1150
    "
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1151
148ed9bf22cd #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22287
diff changeset
  1152
    "Created: / 23-09-2017 / 16:33:26 / cg"
16656
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1153
! !
9d93ee3916f6 class: Number
Stefan Vogel <sv@exept.de>
parents: 16630
diff changeset
  1154
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1155
!Number methodsFor:'converting'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1156
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1157
% aNumber
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1158
    "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
  1159
     aNumber as the imaginary part"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1160
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1161
    ^ Complex real:self imaginary:aNumber
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1162
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1163
    "Modified: / 9.7.1998 / 10:18:12 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1164
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1165
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1166
+/- anError
14009
a2b68a9c9719 comment
Claus Gittinger <cg@exept.de>
parents: 13898
diff changeset
  1167
    "return a MeasurementValue with a given error."
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1168
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1169
    ^ MeasurementValue value:self minValue:(self-anError) maxValue:(self+anError)
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1170
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1171
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1172
     (100 +/- 5) * 2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1173
     (100 +/- 5) * (100 +/- 10)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1174
     (100 +/- 5) + (100 +/- 10)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1175
     (100 +/- 5) - (100 +/- 10)
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1176
    "
14009
a2b68a9c9719 comment
Claus Gittinger <cg@exept.de>
parents: 13898
diff changeset
  1177
a2b68a9c9719 comment
Claus Gittinger <cg@exept.de>
parents: 13898
diff changeset
  1178
    "Modified (comment): / 14-02-2012 / 14:17:36 / cg"
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1179
!
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1180
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1181
@ aNumber
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1182
    "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
  1183
     as y-coordinate"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1184
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1185
%{  /* NOCONTEXT */
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1186
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1187
    /*
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1188
     * I cannot tell if this special code is worth anything
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1189
     */
5322
411b6c0f7250 renamed sone structures;
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  1190
    if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1191
	OBJ newPoint;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1192
	int spc;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1193
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1194
	__qCheckedNew(newPoint, sizeof(struct __Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1195
	__InstPtr(newPoint)->o_class = @global(Point);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1196
	__qSTORE(newPoint, @global(Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1197
	__PointInstPtr(newPoint)->p_x = self;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1198
	__PointInstPtr(newPoint)->p_y = aNumber;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1199
	if (! __bothSmallInteger(self, aNumber)) {
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1200
	    spc = __qSpace(newPoint);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1201
	    __STORE_SPC(newPoint, aNumber, spc);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1202
	    __STORE_SPC(newPoint, self, spc);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1203
	}
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1204
	RETURN ( newPoint );
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1205
    }
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1206
%}
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1207
.
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1208
    ^ Point x:self y:aNumber
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1209
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1210
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1211
asComplex
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1212
    "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
  1213
     zero as the imaginary part"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1214
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  1215
    ^ Complex real:self
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1216
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1217
    "Modified: / 9.7.1998 / 10:18:16 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1218
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1219
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1220
asMetaNumber
21894
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1221
    self isNaN ifTrue:[
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1222
        ^ NotANumber NaN
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1223
    ].    
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1224
    ^ SomeNumber new realNumber:self
21894
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1225
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1226
    "
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1227
     Float NaN asMetaNumber
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1228
     Float infinity asMetaNumber
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1229
     Float negativeInfinity asMetaNumber
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1230
    "
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1231
194db181170d #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21888
diff changeset
  1232
    "Modified (comment): / 21-06-2017 / 20:47:59 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1233
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1234
7214
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1235
asNumber
17060
7b39761eb1ce class: Number
Claus Gittinger <cg@exept.de>
parents: 17058
diff changeset
  1236
    "I am a number, so return myself"
7214
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1237
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1238
    ^ self.
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1239
!
2315f1d48b84 *** empty log message ***
martin
parents: 6899
diff changeset
  1240
19702
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1241
asPercentFrom:fullAmount
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1242
    "what is the percentage
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1243
     taking the receiver's value from the argument"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1244
19702
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1245
    ^ (self / fullAmount) * 100.
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1246
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1247
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1248
     20 asPercentFrom:100
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1249
     (10 asPercentFrom:156) asFixedPoint:2
19702
79ea925e1f35 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19701
diff changeset
  1250
     (15.6 asPercentFrom:156) asFixedPoint:2
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1251
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1252
!
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1253
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1254
asPoint
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1255
    "return a new Point with the receiver as all coordinates;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1256
     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
  1257
     symmetrical gridding or scaling."
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1258
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1259
%{  /* NOCONTEXT */
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1260
5322
411b6c0f7250 renamed sone structures;
Claus Gittinger <cg@exept.de>
parents: 5299
diff changeset
  1261
    if (__CanDoQuickNew(sizeof(struct __Point))) {      /* OBJECT ALLOCATION */
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1262
	OBJ newPoint;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1263
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1264
	__qCheckedNew(newPoint, sizeof(struct __Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1265
	__InstPtr(newPoint)->o_class = @global(Point);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1266
	__qSTORE(newPoint, @global(Point));
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1267
	__PointInstPtr(newPoint)->p_x = self;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1268
	__PointInstPtr(newPoint)->p_y = self;
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1269
	__STORE(newPoint, self);
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1270
	RETURN ( newPoint );
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1271
    }
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1272
%}.
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1273
    ^ Point x:self y:self
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1274
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1275
13898
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1276
asTimeDuration
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1277
    "return an TimeDuration object from the receiver, taking the receiver
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1278
     as number of seconds"
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1279
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1280
    ^ TimeDuration seconds:self
13898
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1281
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1282
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1283
     5 asTimeDuration
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1284
     50.25 asTimeDuration
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1285
     3600 asTimeDuration
13898
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1286
    "
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1287
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1288
    "Created: / 08-01-2012 / 19:04:04 / cg"
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1289
!
42fd67913187 added: #asTimeDuration
Claus Gittinger <cg@exept.de>
parents: 13631
diff changeset
  1290
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1291
degreesToRadians
21105
f51ebd03d20b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20866
diff changeset
  1292
    "interpreting the receiver as degrees, return the radians"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1293
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  1294
    ^ 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
  1295
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1296
    "
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1297
     180 degreesToRadians
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1298
     Float pi radiansToDegrees
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1299
    "
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1300
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1301
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1302
literalArrayEncoding
1245
c8afea3d5af0 commentary
Claus Gittinger <cg@exept.de>
parents: 1210
diff changeset
  1303
    "encode myself as an array literal, from which a copy of the receiver
c8afea3d5af0 commentary
Claus Gittinger <cg@exept.de>
parents: 1210
diff changeset
  1304
     can be reconstructed with #decodeAsLiteralArray."
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1305
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1306
    ^ self
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1307
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1308
    "Modified: 1.9.1995 / 02:25:26 / claus"
1245
c8afea3d5af0 commentary
Claus Gittinger <cg@exept.de>
parents: 1210
diff changeset
  1309
    "Modified: 22.4.1996 / 13:00:27 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1310
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1311
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1312
percentOf:hundredPercent
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1313
    "how many is self-percent from the argument"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1314
19701
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1315
    ^ (hundredPercent / 100 * self)
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1316
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1317
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1318
     20 percentOf:100
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1319
     (10 percentOf:156) asFixedPoint:2
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1320
     (105 percentOf:156) asFixedPoint:2
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1321
    "
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1322
!
92aff12989fa #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19457
diff changeset
  1323
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1324
radiansToDegrees
21105
f51ebd03d20b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20866
diff changeset
  1325
    "interpreting the receiver as radians, return the degrees"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1326
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  1327
    ^ 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
  1328
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1329
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1330
     180 degreesToRadians
7388
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1331
     Float pi radiansToDegrees
bb89a53e2682 fixed conversion from string to not loose precision which is later
Claus Gittinger <cg@exept.de>
parents: 7356
diff changeset
  1332
    "
6637
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1333
!
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1334
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1335
withScale:newScale
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1336
    "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
  1337
     with newScale number of post-decimal digits"
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1338
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1339
    ^ self asFixedPoint:newScale
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1340
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1341
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1342
     1234 withScale:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1343
     1234.1 withScale:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1344
     1234.12 withScale:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1345
     1234.123 withScale:2
6637
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1346
     (1/7) withScale:2
b6ee031f3096 withScale moved up.
Claus Gittinger <cg@exept.de>
parents: 6632
diff changeset
  1347
    "
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1348
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1349
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1350
!Number methodsFor:'converting-times'!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1351
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1352
days
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1353
    "return a TimeDuration representing this number of days"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1354
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1355
    ^ TimeDuration days:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1356
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1357
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1358
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1359
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1360
     10 minutes
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1361
     1 days
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1362
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1363
!
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
hours
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1366
    "return a TimeDuration representing this number of hours"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1367
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1368
    ^ TimeDuration hours:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1369
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1370
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1371
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1372
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1373
     10 minutes
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1374
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1375
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1376
22279
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1377
milliSeconds
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1378
    "return a TimeDuration representing this number of milliseconds
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1379
     Same as milliseconds, for compatibility"
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1380
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1381
    ^ TimeDuration fromMilliseconds:self
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1382
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1383
    "
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1384
     1000 milliSeconds
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1385
    "
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1386
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1387
    "Created: / 21-09-2017 / 17:26:32 / cg"
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1388
!
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1389
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1390
milliseconds
22279
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1391
    "return a TimeDuration representing this number of milliseconds.
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1392
     Same as milliSeconds, for compatibility"
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1393
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1394
    ^ TimeDuration fromMilliseconds:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1395
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1396
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1397
     1000 milliseconds
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1398
    "
22279
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1399
3b4d8c69aa0d #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22143
diff changeset
  1400
    "Modified (comment): / 21-09-2017 / 17:37:18 / cg"
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1401
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1402
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1403
minutes
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1404
    "return a TimeDuration representing this number of minutes"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1405
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1406
    ^ TimeDuration minutes:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1407
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1408
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1409
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1410
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1411
     10 minutes
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1412
    "
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1413
!
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1414
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1415
seconds
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1416
    "return a TimeDuration representing this number of seconds"
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1417
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1418
    ^ TimeDuration seconds:self
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1419
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1420
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1421
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1422
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1423
     10 minutes
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1424
    "
13631
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1425
!
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1426
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1427
weeks
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1428
    "return a TimeDuration representing this number of weeks"
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1429
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1430
    ^ TimeDuration weeks:self
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1431
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1432
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1433
     1000 milliseconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1434
     10 seconds
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1435
     10 minutes
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1436
     1 days
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1437
     1 weeks
13631
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1438
    "
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1439
82875f651ca6 added: #weeks
Claus Gittinger <cg@exept.de>
parents: 12979
diff changeset
  1440
    "Created: / 05-09-2011 / 11:17:59 / cg"
11008
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1441
! !
5a92714a522b timeDuration conversions added
Michael Beyl <mb@exept.de>
parents: 10727
diff changeset
  1442
16406
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1443
!Number methodsFor:'double dispatching'!
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1444
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1445
differenceFromTimestamp:aTimestamp
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1446
    "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
  1447
     before aTimestamp"
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1448
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1449
    ^ aTimestamp subtractMilliseconds:(self * 1000) truncated.
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1450
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1451
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1452
     100.0 differenceFromTimestamp:Timestamp now
16406
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1453
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1454
     |t1 t2|
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1455
     t1 := Timestamp now.
16406
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1456
     t2 := 1.5 differenceFromTimestamp:t1.
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1457
     t1 inspect. t2 inspect.
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1458
    "
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1459
! !
967b6c76169a class: Number
Stefan Vogel <sv@exept.de>
parents: 16267
diff changeset
  1460
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1461
!Number methodsFor:'intervals'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1462
6072
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1463
downTo:stop
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1464
    "return an interval from receiver down to the argument, incrementing by -1"
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1465
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1466
    ^ self to:stop by:-1
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1467
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1468
    "
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1469
     (10 downTo:1) do:[:i | Transcript showCR:i].
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1470
    "
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1471
!
55858717097a added #downTo:
Claus Gittinger <cg@exept.de>
parents: 5565
diff changeset
  1472
15595
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1473
downTo:stop by:step
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1474
    "return an interval from receiver down to the argument, decrementing by step"
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1475
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1476
    ^ self to:stop by:step negated
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1477
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1478
    "
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1479
     (10 downTo:1 by:0.5) do:[:i | Transcript showCR:i].
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1480
    "
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1481
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1482
    "Created: / 01-08-2013 / 14:36:56 / cg"
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1483
!
fa5010435cda class: Number
Claus Gittinger <cg@exept.de>
parents: 15197
diff changeset
  1484
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1485
to:stop
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1486
    "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
  1487
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1488
    ^ Interval from:self to:stop
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1489
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1490
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1491
to:stop by:step
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1492
    "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
  1493
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1494
    ^ Interval from:self to:stop by:step
6154
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1495
!
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1496
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1497
to:stop byFactor:factor
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1498
    "return a geometric series from receiver up to the argument;
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1499
     elements have a constant factor in between"
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1500
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1501
    ^ GeometricSeries from:self to:stop byFactor:factor
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1502
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1503
    "
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1504
     (1 to:256 byFactor:2)
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1505
     (256 to:1 byFactor:1/2)
6154
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  1506
    "
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1507
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1508
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1509
!Number methodsFor:'iteration'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1510
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1511
timesRepeat:aBlock
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1512
    "evaluate the argument, aBlock self times"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1513
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1514
    |count|
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1515
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1516
    count := self.
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1517
    [count > 0] whileTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1518
	aBlock value.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1519
	count := count - 1
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1520
    ]
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1521
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1522
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1523
!Number methodsFor:'mathematical functions'!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1524
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1525
agm:y
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1526
    "return the arithmetic-geometric mean agm(x, y) of the receiver (x) and the argument, y.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1527
     See https://en.wikipedia.org/wiki/Arithmetic-geometric_mean
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1528
     and http://www.wolframalpha.com/input/?i=agm(24,+6)"
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1529
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1530
    |ai an gi gn epsilon delta|
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1531
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1532
    ai := (self + y) / 2.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1533
    gi := (self * y) sqrt.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1534
    epsilon := self epsilon.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1535
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1536
    [
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1537
        an := (ai + gi) / 2.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1538
        gn := (ai * gi) sqrt.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1539
        delta := (an - ai) abs.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1540
        ai := an.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1541
        gi := gn.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1542
    ] doUntil:[ delta < epsilon ].
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1543
    ^ ai
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1544
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1545
    "
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1546
     24 agm:6
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1547
    "
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1548
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1549
    "Created: / 03-07-2017 / 12:05:00 / cg"
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1550
!
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  1551
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1552
cbrt
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1553
    "return the cubic root of the receiver"
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1554
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1555
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1556
    "/ retry after converting to float
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1557
    (self isLimitedPrecisionReal not
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1558
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1559
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1560
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1561
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1562
            ^ f cbrt.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1563
        ].
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1564
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1565
    "/ very slow fallback
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1566
    ^ self cbrt_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1567
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1568
    "Modified: / 05-07-2017 / 17:23:27 / cg"
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1569
!
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  1570
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1571
conjugated
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1572
    "Return the complex conjugate of this Number."
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1573
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1574
    ^ self
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1575
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1576
    "Modified: / 9.7.1998 / 10:17:31 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1577
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1578
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1579
exp
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1580
    "compute e**x of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1581
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1582
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1583
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1584
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1585
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1586
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1587
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1588
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1589
            ^ f exp.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1590
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1591
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1592
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  1593
    ^ self exp_withAccuracy:self epsilon
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  1594
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1595
    "Modified: / 05-07-2017 / 17:23:36 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1596
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1597
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1598
floorLog:radix
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1599
    "return the logarithm truncated as an integer"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1600
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1601
    ^ (self log:radix) floor
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1602
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1603
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1604
imaginary
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1605
    "Return the imaginary part of this Number."
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1606
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1607
    ^ 0
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1608
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1609
    "Modified: / 9.7.1998 / 10:17:24 / cg"
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1610
!
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1611
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1612
ldexp:exp
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1613
    "multiply the receiver by an integral power of 2.
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1614
     I.e. return self * (2 ^ exp)"
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1615
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1616
    ^ self * (2 raisedTo:exp)
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1617
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1618
    "Created: / 19-06-2017 / 01:43:35 / cg"
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1619
!
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1620
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1621
ln
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1622
    "return the natural logarithm of myself.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1623
     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
  1624
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1625
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1626
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1627
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1628
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1629
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1630
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1631
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1632
            ^ f ln.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1633
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1634
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1635
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  1636
    ^ self ln_withAccuracy:self epsilon
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1637
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1638
    "
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1639
     (10 raisedTo:1000) ln
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1640
    "
21833
5276dd24e7c0 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21828
diff changeset
  1641
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1642
    "Modified: / 05-07-2017 / 17:23:50 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1643
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1644
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1645
log
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1646
    "return log base 10 of the receiver.
12584
d32f98e9b219 comment/format in: #log
Claus Gittinger <cg@exept.de>
parents: 12112
diff changeset
  1647
     Alias for log:10."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1648
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1649
    ^ self log10
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1650
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1651
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1652
log10
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1653
    "return log base-10 of the receiver.
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1654
     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
  1655
     Here, fallback to the general logarithm code."
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1656
10550
0f2a07595d1c Fix bug 641: changed #log10 to be more accurate
Stefan Vogel <sv@exept.de>
parents: 10325
diff changeset
  1657
    (self isLimitedPrecisionReal not
0f2a07595d1c Fix bug 641: changed #log10 to be more accurate
Stefan Vogel <sv@exept.de>
parents: 10325
diff changeset
  1658
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1659
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1660
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1661
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1662
            ^ f log10.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1663
        ].
10550
0f2a07595d1c Fix bug 641: changed #log10 to be more accurate
Stefan Vogel <sv@exept.de>
parents: 10325
diff changeset
  1664
    ].
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1665
    ^ self ln / self class ln10
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1666
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1667
    "
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1668
     (10 raisedTo:1000) log10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1669
     (10 raisedTo:2000) log10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1670
     (10 raisedTo:4000) log10
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1671
     (10 raisedTo:8000) log10
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1672
    "
21828
d1a7e7c21694 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21815
diff changeset
  1673
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1674
    "Modified: / 05-07-2017 / 17:23:06 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1675
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1676
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1677
log:aNumber
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  1678
    "return log base aNumber of the receiver.
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  1679
     This will usually return a float value"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1680
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1681
    ^ self ln / aNumber ln
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1682
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1683
    "
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1684
      1000 log:10
19049
7ab1aa4ef01e #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19041
diff changeset
  1685
      9 log:3
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1686
      (1000 log:10) floor
19249
Stefan Vogel <sv@exept.de>
parents: 19141
diff changeset
  1687
      (10 raisedTo:1000) log:10
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  1688
    "
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1689
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1690
22098
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1691
nthRoot:n
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1692
    "return the nth root of the receiver"
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1693
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1694
    n == 2 ifTrue:[^ self sqrt ].
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1695
    n == 3 ifTrue:[^ self cbrt ].
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1696
    "/ slow fallback
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1697
    ^ self nthRoot:n withAccuracy:self epsilon
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1698
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1699
    "
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1700
     10 nthRoot:2 -> 3.16227766016838
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1701
     10 nthRoot:3 -> 2.154434690031883722
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1702
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1703
     100.0 nthRoot:4 
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1704
     100.0 nthRoot:5
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1705
     (100.0 nthRoot:6) raisedTo:6
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1706
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1707
     16.0 nthRoot:2
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1708
     -16.0 nthRoot:3
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1709
     -16.0 nthRoot:5
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1710
     
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1711
     -16.0 nthRoot:4
22098
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1712
    "
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1713
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1714
    "Created: / 25-07-2017 / 16:15:11 / cg"
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  1715
    "Modified (comment): / 22-09-2017 / 10:15:33 / cg"
22098
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1716
!
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  1717
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1718
raisedTo:aNumber
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1719
    "return the receiver raised to aNumber"
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1720
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1721
    aNumber = 0 ifTrue:[^ 1].
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1722
    aNumber = 1 ifTrue:[^ self].
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1723
    aNumber isInteger ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1724
	^ self raisedToInteger:aNumber
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1725
    ].
19018
441811c95c15 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 18863
diff changeset
  1726
    aNumber isNumber ifFalse:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1727
	^ aNumber raisedFromNumber:self.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1728
    ].
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1729
    ^ self asFloat raisedTo:aNumber
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1730
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1731
    "
19092
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1732
     2 raisedTo: 4
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1733
     -2 raisedTo: 4
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1734
     4 raisedTo: 1/2
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1735
     -4 raisedTo: 1/2
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1736
     8 raisedTo: 1/3
4a5b5b1e6f36 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 19049
diff changeset
  1737
     -8 raisedTo: 1/3
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1738
     10 raisedTo: 4
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1739
     10 raisedTo: -4
7468
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1740
    "
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1741
!
61c8a3053bf4 moved math functions to number
Claus Gittinger <cg@exept.de>
parents: 7456
diff changeset
  1742
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1743
real
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1744
    "Return the real part of this Number."
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1745
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1746
    ^ self
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1747
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1748
    "Modified: / 9.7.1998 / 10:17:17 / cg"
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1749
!
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1750
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1751
sqrt
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1752
    "return the square root of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1753
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1754
    "/ if I am not a Float (or a less general lpReal),
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1755
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1756
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1757
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1758
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1759
22115
7781da9ddc6e #DOCUMENTATION by mawalch
mawalch
parents: 22106
diff changeset
  1760
        "/ do not make this a LongFloat;
22119
073225d994bf #TUNING by cg
Claus Gittinger <cg@exept.de>
parents: 22115
diff changeset
  1761
        "/ it will return a LongFloat then, and Image rotated will fail then...
21992
f46021127b61 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21988
diff changeset
  1762
        (f := self asFloat) isFinite ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1763
            ^ f sqrt.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1764
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1765
    ].
19770
024784e1852b #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19769
diff changeset
  1766
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  1767
    ^ self sqrt_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  1768
21992
f46021127b61 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 21988
diff changeset
  1769
    "Modified (format): / 11-07-2017 / 13:32:02 / cg"
22115
7781da9ddc6e #DOCUMENTATION by mawalch
mawalch
parents: 22106
diff changeset
  1770
    "Modified (format): / 26-07-2017 / 12:30:16 / mawalch"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1771
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  1772
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1773
timesTwoPower:anInteger
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1774
    "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
  1775
     For protocol completeness wrt. Squeak and ST80."
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1776
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1777
    anInteger >= 0 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1778
	^ self * (1 bitShift:anInteger)
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1779
    ].
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1780
    ^ self / (1 bitShift:anInteger negated)
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1781
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1782
    "
12762
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1783
     123 timesTwoPower:0   -> 123
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1784
     123 timesTwoPower:1   -> 246
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1785
     123 timesTwoPower:2   -> 492
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1786
     123 timesTwoPower:3   -> 984
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1787
a41a496d8c61 changed: #timesTwoPower:
Claus Gittinger <cg@exept.de>
parents: 12759
diff changeset
  1788
     (2 timesTwoPower: -150) timesTwoPower: 150  -> 2
6258
435600a44e73 added timesTwoPower.
Claus Gittinger <cg@exept.de>
parents: 6195
diff changeset
  1789
    "
3634
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1790
! !
bbf443dce0cf complex conversion stuff
Claus Gittinger <cg@exept.de>
parents: 3613
diff changeset
  1791
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1792
!Number methodsFor:'measurement values'!
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1793
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1794
maxValue
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1795
    "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
  1796
     as I am exact, that's myself"
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1797
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1798
    ^ self
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1799
!
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1800
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1801
minValue
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1802
    "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
  1803
     as I am exact, that's myself"
11458
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1804
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1805
    ^ self
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1806
! !
d668f83e44d1 measurement support
Claus Gittinger <cg@exept.de>
parents: 11224
diff changeset
  1807
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1808
!Number methodsFor:'printing & storing'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  1809
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1810
displayOn:aGCOrStream
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1811
    "return a string to display the receiver.
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1812
     The output radix is usually 10, but can be changed by setting
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1813
     DefaultDisplayRadix (see Integer>>displayRadix:)"
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1814
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1815
    "/ what a kludge - Dolphin and Squeak mean: printOn: a stream;
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1816
    "/ old ST80 means: draw-yourself on a GC.
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1817
    (aGCOrStream isStream) ifFalse:[
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1818
        ^ super displayOn:aGCOrStream
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1819
    ].
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1820
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1821
    (DefaultDisplayRadix isNil or:[DefaultDisplayRadix == 10]) ifTrue:[
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1822
        self printOn:aGCOrStream
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1823
    ] ifFalse:[
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1824
        self printOn:aGCOrStream base:DefaultDisplayRadix showRadix:true.
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1825
    ].
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1826
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1827
    "
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1828
     Integer displayRadix:16. 12345
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1829
     Integer displayRadix:2.  12345
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1830
     Integer displayRadix:10. 12345
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1831
    "
21536
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1832
c71b535bfcbb #OTHER by cg
Claus Gittinger <cg@exept.de>
parents: 21142
diff changeset
  1833
    "Modified (comment): / 22-02-2017 / 16:52:16 / cg"
18863
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1834
!
0fe8c5ecd2fd #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18862
diff changeset
  1835
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1836
printOn:aStream
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1837
    "append a printed description of the receiver to aStream"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1838
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1839
    self printOn:aStream base:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1840
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1841
    "Modified: / 20.1.1998 / 14:10:45 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1842
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1843
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1844
printOn:aStream base:b
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1845
    "return a string representation of the receiver in the specified
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1846
     radix (without the initial XXr)"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1847
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1848
    ^ self printOn:aStream base:b showRadix:false
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1849
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1850
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1851
     10 printOn:Transcript base:3
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1852
     31 printOn:Transcript base:3
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1853
     -20 printOn:Transcript base:16
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1854
     -20 printOn:Transcript base:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1855
     3000 factorial printOn:Transcript base:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1856
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1857
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1858
    "Modified: / 20.1.1998 / 18:05:02 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1859
    "Modified: / 7.9.2001 / 13:52:17 / cg"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1860
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1861
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1862
printOn:aStream base:b showRadix:showRadix
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1863
    "the central print method for integer.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1864
     Must be defined in concrete classes"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1865
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1866
    self subclassResponsibility
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1867
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1868
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1869
printOn:aStream paddedWith:padCharacter to:size base:radix
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1870
    |s|
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1871
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1872
    radix == 10 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1873
	s := self printString.
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1874
    ] ifFalse:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1875
	s := self printStringRadix:radix.
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1876
    ].
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1877
    s printOn: aStream leftPaddedTo:size with: padCharacter
11098
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1878
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1879
    "
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1880
     100 printOn:Transcript paddedWith:$0 to:10 base:10.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1881
     100 printOn:Transcript paddedWith:$0 to:10 base:16.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1882
     100 printOn:Transcript paddedWith:(Character space) to:10 base:16.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1883
     100 printOn:Transcript paddedWith:(Character space) to:10 base:2.     Transcript cr.
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1884
    "
8301
74d9ee379019 decimalPointCharacter definition
werner
parents: 8203
diff changeset
  1885
!
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1886
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1887
printOn:aStream thousandsSeparator:thousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1888
    "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
  1889
     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
  1890
ac25ee31e086 fix printOn:thousandsSeparator when there is a 0 behind a separator
Stefan Vogel <sv@exept.de>
parents: 11098
diff changeset
  1891
    |rest|
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1892
11594
5440d97af571 #printStringWithThousandsSeparator fix for non-integers
Stefan Vogel <sv@exept.de>
parents: 11526
diff changeset
  1893
    self >= 1000 ifTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1894
	(self // 1000) printOn:aStream thousandsSeparator:thousandsSeparator.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1895
	thousandsSeparator printOn:aStream.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1896
	rest := self \\ 1000.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1897
	rest < 100 ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1898
	    aStream nextPut:$0.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1899
	    rest < 10 ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1900
		aStream nextPut:$0.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1901
	    ].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1902
	].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1903
	rest printOn:aStream.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1904
	^ self.
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1905
    ].
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1906
    self printOn:aStream.
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
    "
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1909
     swiss style:
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1910
     1000000 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1911
     12345678 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1912
     1234567 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1913
     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
  1914
     123056 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1915
     12345 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1916
     1234 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1917
     123 printOn:Transcript thousandsSeparator:$'.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1918
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1919
     (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
  1920
     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
  1921
     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
  1922
     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
  1923
     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
  1924
     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
  1925
     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
  1926
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1927
     us style:
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1928
     1000000 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1929
     12345678 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1930
     1234567 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1931
     123456 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1932
     12345 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1933
     1234 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1934
     123 printOn:Transcript thousandsSeparator:$,.     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1935
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1936
     german (european ?) style
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1937
     1000000 printOn:Transcript thousandsSeparator:$..     Transcript cr.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1938
     12345678 printOn:Transcript thousandsSeparator:$..     Transcript cr.
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1939
     1234567 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1940
     123456 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1941
     12345 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1942
     1234 printOn:Transcript thousandsSeparator:$..     Transcript cr.
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1943
     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
  1944
    "
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1945
!
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1946
11660
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1947
printStringFormat:formatString
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1948
    ^ self printfPrintString:formatString
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1949
!
62a726d91255 new: #printStringFormat:
Stefan Vogel <sv@exept.de>
parents: 11594
diff changeset
  1950
20142
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1951
printStringRadix:base
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1952
    "return a string representation of the receiver in the specified
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1953
     base; does NOT prepend XXr to the string.
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1954
     See also: radixPrintStringRadix:
20331
f9e364521eda #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20308
diff changeset
  1955
               printOn:base:showRadix:"
20142
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1956
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1957
    ^ self printStringRadix:base showRadix:false
11098
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1958
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1959
    "
20331
f9e364521eda #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20308
diff changeset
  1960
     10000000000000000000000000000000000000000000 printStringRadix:16    
f9e364521eda #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20308
diff changeset
  1961
     -10000000000000000000000000000000000000000000 printStringRadix:16   
11098
bfc609a33e11 comments
Claus Gittinger <cg@exept.de>
parents: 11097
diff changeset
  1962
    "
5299
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1963
!
92b363dbd833 added #printOn:paddedWith:to:base:
Claus Gittinger <cg@exept.de>
parents: 5238
diff changeset
  1964
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1965
printStringRadix:base showRadix:showRadixBoolean
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1966
    "return a string representation of the receiver in the specified
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1967
     base; does NOT prepend XXr to the string.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1968
     See also: radixPrintStringRadix:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  1969
	       printOn:base:showRadix:"
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1970
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1971
    |s|
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1972
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1973
    s := WriteStream on:(String basicNew:20).
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1974
    self printOn:s base:base showRadix:showRadixBoolean.
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1975
    ^ s contents
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1976
20142
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1977
    "
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1978
     10000000000000000000000000000000000000000000 printStringRadix:16 showRadix:false
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1979
     10000000000000000000000000000000000000000000 printStringRadix:16 showRadix:true
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1980
    "
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1981
c1ec3253b3c1 #REFACTORING by stefan
Stefan Vogel <sv@exept.de>
parents: 19770
diff changeset
  1982
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1983
    "Created: / 23-09-2011 / 13:59:19 / cg"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1984
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  1985
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1986
printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  1987
    "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
  1988
     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
  1989
20866
076ab5e1f702 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20421
diff changeset
  1990
    ^ self printStringWithThousandsSeparator:(UserPreferences current thousandsSeparatorCharacter).
11096
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1991
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1992
    "
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1993
     1000000 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1994
     12345678 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1995
     1234567 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1996
     123456 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1997
     12345 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1998
     1234 printStringWithThousandsSeparator
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  1999
     123 printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2000
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2001
     1000000 asFixedPoint printStringWithThousandsSeparator
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2002
     12345678 asFixedPoint printStringWithThousandsSeparator
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2003
     1234567 asFixedPoint printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2004
     123456 asFixedPoint printStringWithThousandsSeparator
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2005
     12345 asFixedPoint printStringWithThousandsSeparator
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2006
     1234 asFixedPoint printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2007
     123 asFixedPoint printStringWithThousandsSeparator
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2008
     ((9999999//10000) asFixedPoint:9) printStringWithThousandsSeparator
20866
076ab5e1f702 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 20421
diff changeset
  2009
     ((99999999//10000) asFixedPoint:9) printStringWithThousandsSeparator
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2010
    "
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2011
!
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2012
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2013
printStringWithThousandsSeparator:thousandsSeparator
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2014
    "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
  2015
     Notice:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2016
	americans use comma
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2017
	germans (europeans ?) use a dot
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2018
	swiss people (business people ?) use a single quote
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2019
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2020
     Caveat: Should use the separator from the locale here"
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2021
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2022
    ^ String streamContents:[:s | self printOn:s thousandsSeparator:thousandsSeparator].
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2023
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2024
    "
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2025
     Transcript showCR:(1000000 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2026
     Transcript showCR:(12345678 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2027
     Transcript showCR:(1234567 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2028
     Transcript showCR:(123456 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2029
     Transcript showCR:(12345 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2030
     Transcript showCR:(1234 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2031
     Transcript showCR:(123 printStringWithThousandsSeparator:$').
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2032
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2033
     Transcript showCR:(1000000 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2034
     Transcript showCR:(12345678 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2035
     Transcript showCR:(1234567 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2036
     Transcript showCR:(123456 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2037
     Transcript showCR:(12345 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2038
     Transcript showCR:(1234 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2039
     Transcript showCR:(123 printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2040
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2041
     Transcript showCR:((1000000 asFixedPoint:2) printStringWithThousandsSeparator:$,).
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2042
     Transcript showCR:((12345678 asFixedPoint:2) printStringWithThousandsSeparator:$,).
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2043
     Transcript showCR:((1234567 asFixedPoint:2) printStringWithThousandsSeparator:$,).
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2044
     Transcript showCR:((123456 asFixedPoint:2) printStringWithThousandsSeparator:$,).
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2045
     Transcript showCR:((12345 asFixedPoint:2) printStringWithThousandsSeparator:$,).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2046
     Transcript showCR:((1234 asFixedPoint:2) printStringWithThousandsSeparator:$,).
11097
5e4961639e41 printStringWithThousandsSep comments and refactored
Claus Gittinger <cg@exept.de>
parents: 11096
diff changeset
  2047
     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
  2048
    "
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  2049
!
19d6c993e67f printStringWithThousandsSep moved up (also valid for FixedPoint Decimals)
Claus Gittinger <cg@exept.de>
parents: 11008
diff changeset
  2050
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2051
printfPrintString:formatString
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2052
    "Return a printed representation of the receiver as specified by formatString,
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2053
     which is defined by printf."
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2054
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2055
    ^ PrintfScanf printf:formatString argument:self
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2056
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2057
    "
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2058
     2.0 asQDouble printfPrintString:'%10f'
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2059
     2.0 asQDouble printfPrintString:'%10.8f'
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2060
     2.0 printfPrintString:'%10.8f'
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2061
    "
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2062
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2063
    "Created: / 22-06-2017 / 13:55:22 / cg"
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2064
!
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2065
18862
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2066
radixPrintStringRadix:radix
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2067
    "return a string representation of the receiver in the specified
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2068
     base; prepend XXr to the string"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2069
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2070
    ^ self printStringRadix:radix showRadix:true
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2071
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2072
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2073
     31 radixPrintStringRadix:2
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2074
     31 radixPrintStringRadix:3
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2075
     31 radixPrintStringRadix:10
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2076
     31 radixPrintStringRadix:16
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2077
     31 radixPrintStringRadix:36
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2078
    "
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2079
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2080
    "Created: / 19-01-1998 / 17:38:00 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2081
    "Modified: / 20-01-1998 / 14:11:03 / stefan"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2082
    "Modified: / 23-09-2011 / 14:00:02 / cg"
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2083
!
e0c777c9996f #REFACTORING
Claus Gittinger <cg@exept.de>
parents: 18850
diff changeset
  2084
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2085
storeOn:aStream
11460
146fb82b5523 comment
Claus Gittinger <cg@exept.de>
parents: 11458
diff changeset
  2086
    "append a string for storing the receiver onto the argument, aStream
146fb82b5523 comment
Claus Gittinger <cg@exept.de>
parents: 11458
diff changeset
  2087
     - since numbers are literals,they store as they print."
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2088
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2089
    ^ self printOn:aStream
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2090
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2091
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2092
storeString
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2093
    "return a string for storing
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2094
     - since numbers are literals, they store as they print."
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2095
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2096
    ^ self printString
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2097
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2098
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2099
!Number methodsFor:'taylor series'!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2100
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2101
arcSin_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2102
    "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
  2103
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2104
    "/ uses taylor series:
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2105
    "/                 1*x^3   1*3 * x^5
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2106
    "/    arcSin = x + ----- + ---------- + ...
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2107
    "/                 2* 3    2*4 *  5
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2108
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2109
    |x2 num numf den denf approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2110
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2111
    ((self < -1) or:[self > 1]) ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2112
	^ self class
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2113
	    raise:#domainErrorSignal
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2114
	    receiver:self
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2115
	    selector:#arcSin
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2116
	    arguments:#()
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2117
	    errorString:'bad receiver in arcSin'
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2118
    ].
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2119
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2120
    x2 := self * self.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2121
    num := x2 * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2122
    approx := self + (num / 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
    numf := 3.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2125
    denf := 4.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2126
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2127
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2128
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2129
	num := (num * x2) * numf.   numf := numf + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2130
	den := den * denf.          denf := denf + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2131
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2132
	delta := num / (den * numf).
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2133
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2134
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2135
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2136
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2137
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2138
     0.5 arcSin                                    0.523599
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2139
     0.5q arcSin                        0.523598776
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2140
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2141
     0.5q arcSin_withAccuracy:1         0.520833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2142
     0.5q arcSin_withAccuracy:0.1       0.520833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2143
     0.5q arcSin_withAccuracy:0.01      0.523177083
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2144
     0.5q arcSin_withAccuracy:0.001     0.523525856
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2145
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2146
     0.5q arcSin_withAccuracy:1e-20     0.523598776
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2147
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2148
     0.5 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2149
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2150
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2151
     0.1 arcSin                                    0.100167
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2152
     0.1q arcSin                        0.100167421
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2153
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2154
     0.1q arcSin_withAccuracy:1         0.100166667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2155
     0.1q arcSin_withAccuracy:0.1       0.100166667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2156
     0.1q arcSin_withAccuracy:0.01      0.100166667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2157
     0.1q arcSin_withAccuracy:0.001     0.100166667
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2158
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2159
     0.1q arcSin_withAccuracy:1e-20     0.100167421
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2160
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2161
     0.1 asLargeFloat arcSin_withAccuracy:1e-30    -- not yet
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2162
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2163
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2164
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2165
arcTan_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2166
    "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
  2167
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2168
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2169
    "/                 x^3   x^5   x^7
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2170
    "/ arcTan(x) = x - --- + --- - --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2171
    "/                  3     5    7
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2172
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2173
    |x2 num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2174
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2175
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2176
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2177
    num := (x2 * self) negated.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2178
    den := 3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2179
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2180
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2181
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2182
	den := den + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2183
	num := (num * x2) negated.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2184
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2185
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2186
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2187
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2188
    ^ approx
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
    "
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2191
     1.0 arcTan                       0.785398
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2192
     1q arcTan                        0.785398163
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2193
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2194
     1q arcTan_withAccuracy:1         0.666666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2195
     1q arcTan_withAccuracy:0.1       0.744011544
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2196
     1q arcTan_withAccuracy:0.01      0.790299653
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2197
     1q arcTan_withAccuracy:0.001     0.785897165
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2198
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2199
     1q arcTan_withAccuracy:1e-8      0.785398168
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2200
     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
  2201
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2202
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2203
     0.5 arcTan                         0.463648
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2204
     0.5q arcTan                        0.463647609
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2205
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2206
     0.5q arcTan_withAccuracy:1         0.458333333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2207
     0.5q arcTan_withAccuracy:0.1       0.458333333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2208
     0.5q arcTan_withAccuracy:0.01      0.464583333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2209
     0.5q arcTan_withAccuracy:0.001     0.463684276
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2210
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2211
     0.5q arcTan_withAccuracy:1e-20     0.463647609
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2212
     0.5 asLargeFloat arcTan_withAccuracy:1e-30    -- not yet
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2213
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2214
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2215
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2216
cbrt_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2217
    "compute cubic root of the receiver using a newton approx."
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2218
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2219
    "Use Newton's method (not taylor):
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2220
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2221
                 2*x_n + (a / x_n^2)
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2222
        x_n+1 =  ---------------
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2223
                      3
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2224
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2225
        cbrt(a) = x_n
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2226
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2227
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2228
    |approx|
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2229
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2230
    self = 0 ifTrue:[
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2231
        ^ self
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2232
    ].
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2233
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2234
    approx := 1.
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2235
    [
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2236
        |lastApprox|
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2237
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2238
        lastApprox := approx.
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2239
        approx := ((approx * 2) + (self / approx / approx)) / 3.
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2240
        (approx - lastApprox) abs > epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2241
    ] whileTrue.
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2242
    ^ approx
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2243
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2244
    "
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2245
     8q cbrt                                         2.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2246
     8q cbrt_withAccuracy:0.01                       2.000004911675504018
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2247
     8q cbrt_withAccuracy:0.0001                     2.000000000012062239
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2248
     8q cbrt_withAccuracy:0.0000001                  2.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2249
     8q cbrt_withAccuracy:0.0000000001               2.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2250
     8q cbrt_withAccuracy:0.000000000001             2.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2251
     8q cbrt_withAccuracy:LongFloat epsilon          2.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2252
     8q asQDouble cbrt_withAccuracy:QDouble epsilon  2.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2253
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2254
     27q cbrt_withAccuracy:0.01                      3.000000541064176501
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2255
     27q cbrt_withAccuracy:LongFloat epsilon         3.0
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2256
     -27q cbrt_withAccuracy:LongFloat epsilon        -3.0
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2257
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2258
     MessageTally spyOn:[ |arg|
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2259
        arg := 2 asLongFloat.
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2260
        1000000 timesRepeat:[
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2261
             arg cbrt_withAccuracy:0.000000000001
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2262
        ]
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2263
     ]
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2264
     Time millisecondsToRun:[ |arg|
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2265
        arg := 2 asLongFloat.
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2266
        1000000 timesRepeat:[
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2267
             arg cbrt_withAccuracy:0.000000000001
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2268
        ]
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2269
     ]
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2270
    "
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2271
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2272
    "Modified (comment): / 25-07-2017 / 16:09:22 / cg"
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2273
!
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2274
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2275
cos_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2276
    "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
  2277
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2278
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2279
    "/               x^2   x^4   x^6
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2280
    "/  cos(x) = 1 - --- + --- - --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2281
    "/                2!!    4!!    6!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2282
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2283
    |x2 facN num den approx lastApprox|
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2284
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2285
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2286
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2287
    num := x2 negated.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2288
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2289
    facN := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2290
    approx := 1 + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2291
    lastApprox := 1.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2292
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2293
    [ (lastApprox - approx) abs > epsilon ] whileTrue:[
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2294
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2295
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2296
	num := (num * x2) negated.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2297
	lastApprox := approx.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2298
	approx := approx + (num / den).
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2299
    ].
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2300
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2301
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2302
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2303
     1.0 cos                                    0.540302
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2304
     1.0 asLongFloat cos_withAccuracy:1         0.5
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2305
     1.0 asLongFloat cos_withAccuracy:0.1       0.541666667
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2306
     1.0 asLongFloat cos_withAccuracy:0.01      0.540277778
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2307
     1.0 asLongFloat cos_withAccuracy:0.001     0.540302579
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2308
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2309
     1.0 asLongFloat cos_withAccuracy:1e-40     0.540302306
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2310
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2311
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2312
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2313
cosh_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2314
    "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
  2315
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2316
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2317
    "/               x^2   x^4   x^6
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2318
    "/    cosh = x + --- + --- + --- ...
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2319
    "/                2!!    4!!    6!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2320
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2321
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2322
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2323
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2324
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2325
    num := x2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2326
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2327
    facN := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2328
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2329
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2330
    [
22143
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2331
        facN := facN + 2.
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2332
        den := den * (facN - 1) * facN.
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2333
        num := num * x2.
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2334
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2335
        delta := num / den.
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2336
        approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2337
    ] doUntil:[delta <= epsilon].
22143
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2338
    ^ approx + self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2339
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2340
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2341
     1.0 cosh                                    1.54308
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2342
     1.0q cosh_withAccuracy:1         1.5
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2343
     1.0q cosh_withAccuracy:0.1       1.54308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2344
     1.0q cosh_withAccuracy:0.01      1.54308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2345
     1.0q cosh_withAccuracy:0.001     1.54308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2346
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2347
     1.0q cosh_withAccuracy:1e-40   -> 1.543080
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2348
    "
22143
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2349
b634ad282d1c #BUGFIX by stefan
Stefan Vogel <sv@exept.de>
parents: 22119
diff changeset
  2350
    "Modified: / 01-08-2017 / 14:54:40 / stefan"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2351
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2352
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2353
epsilon
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2354
    "return the maximum relative spacing of instances of mySelf
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2355
     (i.e. the value-delta of the least significant bit)"
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2356
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2357
    ^ self class epsilon
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2358
!
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  2359
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2360
exp_withAccuracy:epsilon
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2361
    "compute e^x of the receiver using a taylor series approximation.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2362
     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
  2363
     exp themself (i.e. QDouble)"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2364
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2365
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2366
    "/             x    x^2   x^3
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2367
    "/  e^x = 1 + --- + --- + --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2368
    "/             1!!    2!!    3!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2369
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2370
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2371
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2372
    x2 := self * self. "/ self squared.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2373
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2374
    num := x2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2375
    den := 2.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2376
    facN := 2.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2377
    approx := self + 1 + (num / den).
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2378
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2379
    [
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2380
        facN := facN + 1.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2381
        den := den * facN.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2382
        num := num * self.
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2383
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2384
        delta := num / den.
22302
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2385
"/ delta mantissa == 0 ifTrue:[self halt. num / den].
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2386
"/ Transcript showCR:delta.
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2387
        delta isNaN ifTrue:[self halt:'nan when dividing for delta'. num / den].
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2388
        delta = 0 ifTrue:[self halt:'zero delta'].
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2389
        approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2390
    ] doUntil:[delta abs <= epsilon].
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2391
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2392
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2393
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2394
    "
22302
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2395
     wolfram:
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2396
                7.389056098930650227230427460575007813180315570551847324087
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2397
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2398
     (2 asLargeFloat exp_withAccuracy:1e-100) printfPrintString:'%50.48f'                      
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2399
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2400
     1.0 exp                                    2.71828
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2401
     1q exp                                     2.71828183
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2402
     2q exp                                     7.3890561
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2403
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2404
     1q exp_withAccuracy:1                      2.66666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2405
     1q exp_withAccuracy:0.1                    2.70833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2406
     1q exp_withAccuracy:0.01                   2.71666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2407
     1q exp_withAccuracy:0.001                  2.71825397
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2408
21912
c3fe3452acb2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21910
diff changeset
  2409
     -1 exp                                     0.367879441171442
c3fe3452acb2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21910
diff changeset
  2410
     -1q exp_withAccuracy:(1e-60)               0.3678794411714423216
c3fe3452acb2 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21910
diff changeset
  2411
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2412
     2q exp_withAccuracy:LongFloat epsilon      7.3890561
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2413
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2414
     42 asQDouble exp_withAccuracy:QDouble epsilon        
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2415
     42 asQDouble exp_withAccuracy:LongFloat epsilon  
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2416
     42 asQDouble exp_withAccuracy:Float epsilon    
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2417
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2418
     2 asQDouble exp_withAccuracy:QDouble epsilon   7.38905609893065022723     
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2419
     2 asQDouble exp_withAccuracy:LongFloat epsilon 7.38905609893065022723  
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2420
     2 asQDouble exp_withAccuracy:Float epsilon     7.38905609893065022489
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2421
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2422
     1 asQDouble exp_withAccuracy:QDouble epsilon   2.71828182845904523536     
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2423
     1 asQDouble exp_withAccuracy:LongFloat epsilon 2.71828182845904523536 
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2424
     1 asQDouble exp_withAccuracy:Float epsilon     2.71828182845904522671
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2425
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2426
     1.0 asLongFloat exp_withAccuracy:1e-40     2.71828183
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
     5 exp_withAccuracy:1e-40
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2429
     (1 exp_withAccuracy:1e-100) asFixedPoint:100
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2430
    "
21888
f7b6885f1cec #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21871
diff changeset
  2431
22302
cc8e3512ac18 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22290
diff changeset
  2432
    "Modified: / 10-10-2017 / 16:04:08 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2433
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2434
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2435
ln_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2436
    "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
  2437
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2438
    "uses taylor series:
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2439
                 u^2   u^3
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2440
        ln = u - --- + --- ...
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2441
                  2    3
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2442
      where:
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2443
             u = x - 1    and: x < 1
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2444
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2445
     Now we use modified taylor, which converges a little faster:
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2446
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2447
                   1+y        1   1       1
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2448
        ln(x) = ln --- = 2y ( - + - y^2 + - y^4 + ....)
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2449
                   1-y        1   3       5
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2450
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2451
        where y = (x-1) / (x+1)  and x > 0
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2452
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2453
     Warning: this converges very slowly. Find a better algorithm    
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2454
    "
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2455
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2456
    |denominator approx y y2 exp delta count|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2457
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2458
    self <= 0 ifTrue:[
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2459
        ^ self class
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2460
            raise:(self = 0 ifTrue:[#infiniteResultSignal] ifFalse:[#domainErrorSignal])
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2461
            receiver:self
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2462
            selector:#ln
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2463
            arguments:#()
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2464
            errorString:'bad receiver in ln (not strictly positive)'
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2465
    ].
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2466
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2467
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2468
    y := (self - 1)/(self + 1).
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2469
    exp := y2 := y squared.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2470
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2471
    approx := 1.0.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2472
    denominator := 3.0.
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2473
    count := 1.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2474
    
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2475
    [
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2476
        delta := exp / denominator.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2477
        approx := approx + delta.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2478
        exp := exp * y2.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2479
        denominator := denominator + 2.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2480
        
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2481
        count := count + 1.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2482
        (count \\ 100) == 0 ifTrue:[
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2483
            Logger warning:'slow ln-taylor converging...'.
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2484
        ].    
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2485
    ] doUntil:[delta <= epsilon or:[count > 10000]].
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2486
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2487
    ^ y * 2 * approx.
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2488
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2489
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2490
    "
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2491
     2.0 ln                         0.693147180559945
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2492
     2.0q ln                        0.6931471805599453094
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2493
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2494
     2.0q ln_withAccuracy:1                  0.691358025
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2495
     2.0q ln_withAccuracy:0.1                0.691358025
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2496
     2.0q ln_withAccuracy:0.01               0.693004115
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2497
     2.0q ln_withAccuracy:0.0000001          0.69314718
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2498
     2.0q ln_withAccuracy:1e-10              0.6931471805589163927
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2499
     2.0q ln_withAccuracy:1e-20              0.6931471805599453094
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2500
     2.0q ln_withAccuracy:1e-40              0.6931471805599453094
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2501
     2.0q ln_withAccuracy:2.0q class epsilon 0.6931471805599453094
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2502
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2503
     (2 ln_withAccuracy:1e-40) -> a fraction        
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2504
     0 ln_withAccuracy:1e-40
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2505
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2506
     (2 ln_withAccuracy:1e-100) asFixedPoint:100
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2507
     (2 asFixedPoint:200) ln_withAccuracy:(1/(10 raisedTo:200))
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2508
        0.69314718055994530941723212145817656807550013436025525412068000949339362196969471560586332699641868754200148102057068573368552023575813055703267075163507596193072757082837143519030703862389167347112335
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2509
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2510
     (2 asFixedPoint:400) ln_withAccuracy:(1/(10 raisedTo:400))
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2511
        0.69314718055994530941723212145817656807550013436025525412068000949339362196969471560586332699641868754200148102057068573368552023575813055703267075163507596193072757082837143519030703862389167347112335 01153644979552391204751726815749320651555247341395258829504530070953263666426541042391578149520437404303855008019441706416715186447128399681717845469570262716310645461502572074024816377733896385506953
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2512
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2513
     (2.0 asQDouble ln_withAccuracy:QDouble epsilon) printfPrintString:'%60.58f'
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2514
        0.69314718055994 52709398341558750792990469129794959648865081'
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2515
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2516
     Wolfram says:
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2517
        0.69314718055994530941723212145817656807550013436025525412068000949339362196969471560586332699641868754200148102057068573368552023575813055703267075163507596193072757082837143519030703862389167347112335 01153644979552391204751726...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2518
    "
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2519
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2520
    "Modified: / 05-07-2017 / 17:16:24 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2521
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2522
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2523
nthRoot:n withAccuracy:epsilon
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2524
    "compute nth root of the receiver using a newton approx."
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2525
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2526
    "
22104
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2527
      Use Newton's method:
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2528
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2529
                 (n-1)*x_n^n + (a / x_n^(n-1))
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2530
        x_n+1 =  -----------------------------
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2531
                             n
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2532
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2533
        rt(n, a) = x_n
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2534
    "
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2535
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2536
    |approx delta absDelta prevDelta|
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2537
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2538
    self = 0 ifTrue:[
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2539
        ^ self
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2540
    ].
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2541
22104
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2542
    "/ the demanded epsilon may NEVER be smaller than the real representation's epsilon
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2543
    self assert:(epsilon >= (self class epsilon)).
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2544
    
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2545
    approx := (self / 2).
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2546
    delta := ((self / (approx raisedToInteger:(n-1))) - approx) / n.
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2547
    absDelta := delta abs.
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2548
    approx := approx + delta.
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2549
    
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2550
    [
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2551
        prevDelta := absDelta.
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2552
        
22104
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2553
        delta := ((self / (approx raisedToInteger:(n-1))) - approx) / n.
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2554
        absDelta := delta abs.
22104
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2555
        approx := approx + delta.
22098
e5884f5aa8df #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 22097
diff changeset
  2556
        
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2557
        (absDelta < prevDelta) ifFalse:[ 
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2558
            DomainError raiseRequestErrorString:'no convergence in Newton approx.'
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2559
        ].
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2560
        
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2561
        (absDelta > epsilon)
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2562
    ] whileTrue.
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2563
    ^ approx
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2564
22104
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2565
    "                                             
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2566
     8q nthRoot:3 withAccuracy:0.01               2.00000002488636242
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2567
     8q nthRoot:3 withAccuracy:0.0001             2.00000000000000031
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2568
     8q nthRoot:3 withAccuracy:0.0000001          2.00000000000000031
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2569
     8q nthRoot:3 withAccuracy:0.0000000001       2.0
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2570
     8q nthRoot:3 withAccuracy:0.000000000001     2.0
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2571
     8q nthRoot:3 withAccuracy:LongFloat epsilon  2.0
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2572
22104
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2573
     27q nthRoot:3 withAccuracy:0.01                3.000000081210202031
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2574
     27q nthRoot:3 withAccuracy:LongFloat epsilon   3.0
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2575
     -27q nthRoot:3 withAccuracy:LongFloat epsilon  -3.0
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2576
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2577
     10000q nthRoot:5 withAccuracy:1e-18        -> 6.309573444801932495 
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2578
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2579
     (10000 asQDouble nthRoot:5) printfPrintString:'%70.68f'
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2580
               6.30957344480193249434360136622343864672945257188228724527729528834741'
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2581
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2582
     actual result (Mathematica):        
06243cca0b18 #BUGFIX by cg
Claus Gittinger <cg@exept.de>
parents: 22098
diff changeset
  2583
               6.309573444801932494343601366223438646729452571882287245277...
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2584
    "
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2585
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2586
    "Created: / 22-06-2017 / 15:51:55 / cg"
22287
df6101a1d351 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22279
diff changeset
  2587
    "Modified: / 22-09-2017 / 10:14:59 / cg"
21915
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2588
!
358869e5f606 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21912
diff changeset
  2589
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2590
sin_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2591
    "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
  2592
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2593
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2594
    "/               x^3   x^5   x^7
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2595
    "/  sin(x) = x - --- + --- - --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2596
    "/                3!!    5!!    7!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2597
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2598
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2599
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2600
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2601
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2602
    num := (x2 * self) negated.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2603
    den := 2*3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2604
    facN := 3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2605
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2606
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2607
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2608
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2609
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2610
	num := (num * x2) negated.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2611
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2612
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2613
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2614
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2615
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2616
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2617
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2618
     1.0 sin                                    0.841471
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2619
     1.0q sin                        0.841470985
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2620
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2621
     1.0q sin_withAccuracy:1         0.833333333
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2622
     1.0q sin_withAccuracy:0.1       0.841666667
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2623
     1.0q sin_withAccuracy:0.01      0.841666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2624
     1.0q sin_withAccuracy:0.001     0.841468254
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2625
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2626
     1.0q sin_withAccuracy:1e-40     0.841470985
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2627
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2628
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2629
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2630
sinh_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2631
    "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
  2632
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2633
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2634
    "/               x^3   x^5   x^7
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2635
    "/ sinh(x) = x + --- + --- + --- ...
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2636
    "/                3!!    5!!    7!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2637
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2638
    |x2 facN num den approx delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2639
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2640
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2641
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2642
    num := x2 * self.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2643
    den := 2*3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2644
    facN := 3.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2645
    approx := self + (num / den).
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2646
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2647
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2648
	facN := facN + 2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2649
	den := den * (facN - 1) * facN.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2650
	num := num * x2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2651
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2652
	delta := num / den.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2653
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2654
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2655
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2656
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2657
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2658
     1.0 sinh                                    1.1752
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2659
     1q sinh                        1.17520119
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2660
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2661
     1q sinh_withAccuracy:1         1.16666667
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2662
     1q sinh_withAccuracy:0.1       1.175
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2663
     1q sinh_withAccuracy:0.01      1.175
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2664
     1q sinh_withAccuracy:0.001     1.17519841
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2665
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2666
     1q sinh_withAccuracy:1e-40     1.17520119
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2667
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2668
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2669
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2670
sqrt_withAccuracy:epsilon
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2671
    "compute square root of the receiver using newton-raphson/heron algorithm"
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2672
    "Use the Heron algorithm (not Taylor)"
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2673
22096
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2674
    |guess|
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2675
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2676
    false "self isInteger" ifTrue:[
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2677
        guess := 1 bitShift:(self highBit // 2)
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2678
    ] ifFalse:[
22106
9f2406985b6f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22104
diff changeset
  2679
        guess := self / 2.0.
22096
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2680
    ].    
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2681
    ^ self sqrt_withAccuracy:epsilon fromInitialGuess:guess
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2682
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2683
    "
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2684
     2 sqrt                                  1.4142135623731      - computed by CPU/FPU
22096
9215a25fe639 #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 22043
diff changeset
  2685
     200000000 sqrt                          
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2686
     
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2687
     2q sqrt                                 1.414213562373095049 - computed by CPU/FPU
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2688
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2689
     2q sqrt_withAccuracy:0.01               1.414215686274509804 - computed by Smalltalk
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2690
     2q sqrt_withAccuracy:0.0001             1.414213562374689911
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2691
     2q sqrt_withAccuracy:0.0000001          1.414213562373095049
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2692
     2q sqrt_withAccuracy:0.0000000001       1.414213562373095049
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2693
     2q sqrt_withAccuracy:0.000000000001     1.414213562373095049
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2694
     
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2695
     2q sqrt_withAccuracy:LongFloat epsilon  1.414213562373095049
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2696
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2697
     (4 sqrt_withAccuracy:Integer epsilon) asFloat
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2698
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2699
     MessageTally spyOn:[ |arg|
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2700
        arg := 2 asLongFloat.
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2701
        1000000 timesRepeat:[
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2702
             arg sqrt_withAccuracy:0.000000000001
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2703
        ]
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2704
     ]
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2705
     Time millisecondsToRun:[ |arg|
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2706
        arg := 2 asLongFloat.
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2707
        1000000 timesRepeat:[
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2708
             arg sqrt_withAccuracy:0.000000000001
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2709
        ]
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2710
     ]
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2711
    "
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2712
22106
9f2406985b6f #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22104
diff changeset
  2713
    "Modified: / 25-07-2017 / 17:44:46 / cg"
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2714
!
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2715
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2716
sqrt_withAccuracy:epsilon fromInitialGuess:guess
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2717
    "compute square root of the receiver using newton-raphson/heron algorithm"
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2718
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2719
    "Use the Heron algorithm (not Taylor):
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2720
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2721
                 x_n + (a / x_n)
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2722
        x_n+1 =  ---------------
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2723
                      2
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2724
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2725
        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
  2726
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2727
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2728
    |approx|
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2730
    self <= 0 ifTrue:[
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2731
        self = 0 ifTrue:[
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2732
            ^ self
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2733
        ].
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2734
        ^ self class
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2735
            raise:#imaginaryResultSignal
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2736
            receiver:self
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2737
            selector:#sqrt
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2738
            arguments:#()
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2739
            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
  2740
    ].
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2741
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2742
    approx := guess.
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2743
    [
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2744
        |lastApprox|
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2745
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2746
        lastApprox := approx.
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2747
        approx := ((self / approx) + approx) / 2.
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2748
        (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
  2749
    ] whileTrue.
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2750
    ^ approx
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2751
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2752
    "
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2753
     2 sqrt                                  1.4142135623731
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2754
     2q sqrt                                 1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2755
     2q sqrt_withAccuracy:0.01               1.414215686274509804
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2756
     2q sqrt_withAccuracy:0.0001             1.414213562374689911
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2757
     2q sqrt_withAccuracy:0.0000001          1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2758
     2q sqrt_withAccuracy:0.0000000001       1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2759
     2q sqrt_withAccuracy:0.000000000001     1.414213562373095049
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2760
     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
  2761
21916
da181b5ca94e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21915
diff changeset
  2762
     (2 asQDouble sqrt_withAccuracy:LongFloat epsilon) printfPrintString:'%70.68f'
da181b5ca94e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21915
diff changeset
  2763
            1.41421356237309504880168872420969807856967187537723400156101313309966
da181b5ca94e #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 21915
diff changeset
  2764
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2765
     (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
  2766
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2767
     MessageTally spyOn:[ |arg|
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2768
        arg := 2 asLongFloat.
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2769
        1000000 timesRepeat:[
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2770
             arg sqrt_withAccuracy:0.000000000001
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2771
        ]
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2772
     ]
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2773
     Time millisecondsToRun:[ |arg|
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2774
        arg := 2 asLongFloat.
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2775
        1000000 timesRepeat:[
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2776
             arg sqrt_withAccuracy:0.000000000001
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2777
        ]
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2778
     ]
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2779
    "
21910
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2780
97611fd50260 #UI_ENHANCEMENT by cg
Claus Gittinger <cg@exept.de>
parents: 21894
diff changeset
  2781
    "Created: / 22-06-2017 / 13:59:48 / cg"
22097
5aa70f7b0d9d #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 22096
diff changeset
  2782
    "Modified (comment): / 25-07-2017 / 16:07:37 / cg"
7729
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2783
!
bbd20db09d1b Fix senders of #xxxx_withAccuracy: to use #epsilon instead of #precision.
Stefan Vogel <sv@exept.de>
parents: 7468
diff changeset
  2784
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2785
tan_withAccuracy:epsilon
17190
284d9c71385f class: Number
Claus Gittinger <cg@exept.de>
parents: 17127
diff changeset
  2786
    "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
  2787
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2788
    "/ uses taylor series:
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2789
    "/                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
  2790
    "/    tan = x + 1*--- + 2*--- + 17*--- + 62*----... ----------------------------------...
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2791
    "/                 3       15      315      2835                 (2n)!!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2792
    "/ where Bi is the ith bernoulli number.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2793
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2794
    |factors idx x2 num t approx lastApprox delta|
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2795
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2796
    "/    (1 to:20) collect:[:n| |num den|
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2797
    "/        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
  2798
    "/        den := (2*n) factorial.
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2799
    "/        num / den
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2800
    "/    ]
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2801
   factors := #(
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2802
	(1 3)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2803
	(2 15)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2804
	(17 315)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2805
	(62 2835)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2806
	(1382 155925)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2807
	(21844 6081075)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2808
	(929569 638512875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2809
	(6404582 10854718875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2810
	(443861162 1856156927625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2811
	(18888466084 194896477400625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2812
	(113927491862 2900518163668125)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2813
	(58870668456604 3698160658676859375)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2814
	(8374643517010684 1298054391195577640625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2815
	(689005380505609448 263505041412702261046875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2816
	(129848163681107301953 122529844256906551386796875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2817
	(1736640792209901647222 4043484860477916195764296875)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2818
	(418781231495293038913922 2405873491984360136479756640625)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2819
	(56518638202982204522669764 801155872830791925447758961328125)
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2820
	(32207686319158956594455462 1126482925555250126673224649609375)).
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2821
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2822
    x2 := self * self.
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2823
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2824
    num := x2 * self.               "/ =  x^3
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2825
    approx := self + (num / 3).     "/ do the first iteration
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2826
    lastApprox := self.
8203
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2827
    idx := 2.
666bfa7bcb97 Fix C cmpiler warnings.
Stefan Vogel <sv@exept.de>
parents: 7857
diff changeset
  2828
    [
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2829
	t := factors at:idx ifAbsent:[].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2830
	t isNil ifTrue:[
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2831
	    self error:'too many iterations'.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2832
"/ Not enough bernoulli numbers for now...
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2833
"/            |tempNum tempDen|
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2834
"/            tempNum := 2 raisedTo:(2*idx).
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2835
"/            tempNum := tempNum * (tempNum-1) * ((2*idx) bernoulli).
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2836
"/            tempDen := (2*idx) factorial.
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2837
"/            t := Array with:tempNum with:tempDen.
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2838
	].
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2839
	idx := idx + 1.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2840
	num := num * x2.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2841
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2842
	delta := num * t first / t second.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2843
	approx := approx + delta.
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2844
    ] doUntil:[delta abs <= epsilon].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2845
    ^ approx
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2846
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2847
    "
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2848
     0.5 tan                         0.546302
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2849
     0.5q tan                        0.54630249
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2850
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2851
     0.5q tan_withAccuracy:1         0.541666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2852
     0.5q tan_withAccuracy:0.1       0.541666667
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2853
     0.5q tan_withAccuracy:0.01      0.545833333
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2854
     0.5q tan_withAccuracy:0.001     0.54625496
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2855
     0.5q tan_withAccuracy:1e-15     0.54630249
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2856
10556
fb4ea1df1f1d Fix/speed up taylor computations
Stefan Vogel <sv@exept.de>
parents: 10550
diff changeset
  2857
     0.5q tan_withAccuracy:1e-40     -- too many iterations
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2858
    "
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2859
! !
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2860
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2861
!Number methodsFor:'testing'!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2862
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2863
even
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2864
    "return true if the receiver is divisible by 2."
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2865
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2866
    self fractionPart = 0 ifTrue:[
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2867
        ^ (self / 2) fractionPart = 0
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2868
    ].
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2869
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2870
    "this will raise an error"
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2871
    ^ super even
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2872
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2873
    "
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2874
     2 even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2875
     2.0 even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2876
     3.0 even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2877
     2.4 even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2878
     (5/3) even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2879
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2880
     2 asFraction even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2881
     (2 asFixedPoint:5) even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2882
     2 asFloatE even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2883
     2 asFloatD even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2884
     2 asFloatQ even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2885
     2 asFloatQD even
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2886
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2887
     (2.1 asFloatQD - (QDouble readFrom:'2.1')) fractionPart
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2888
    "
21982
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2889
e5e18c857a2b #REFACTORING by cg
Claus Gittinger <cg@exept.de>
parents: 21930
diff changeset
  2890
    "Modified (comment): / 03-07-2017 / 14:14:46 / cg"
17224
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2891
!
43a8ca39cc90 class: Number
Stefan Vogel <sv@exept.de>
parents: 17207
diff changeset
  2892
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2893
isDivisibleBy:aNumber
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2894
    "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
  2895
     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
  2896
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2897
    aNumber = 0 ifTrue: [^ false].
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2898
    aNumber isInteger ifFalse: [^ false].
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2899
    ^ (self \\ aNumber) = 0
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2900
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2901
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2902
     3 isDivisibleBy:2
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2903
     4 isDivisibleBy:2
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2904
     4.0 isDivisibleBy:2
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2905
     4.5 isDivisibleBy:4.5
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  2906
     4.5 isDivisibleBy:1.0
5360
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2907
    "
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2908
!
1aef297d3cbe added #isDivisibleBy:
Claus Gittinger <cg@exept.de>
parents: 5322
diff changeset
  2909
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2910
isNaN
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2911
    "return true, if the receiver is an invalid float (NaN - not a number)."
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2912
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2913
    ^ false
6155
00eaf2fa55bc isReal comment
Claus Gittinger <cg@exept.de>
parents: 6154
diff changeset
  2914
00eaf2fa55bc isReal comment
Claus Gittinger <cg@exept.de>
parents: 6154
diff changeset
  2915
    "Created: / 5.11.2001 / 18:07:26 / cg"
6143
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2916
!
695cc93a96b4 isNan, isInfinite and closeTo:
james
parents: 6087
diff changeset
  2917
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2918
isNumber
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2919
    "return true, if the receiver is a kind of number"
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2920
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2921
    ^ true
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2922
!
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2923
19136
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2924
isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2925
    "return true if I am a perfect square.
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2926
     That is a number for which the square root is an integer."
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2927
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2928
    self truncated = self ifFalse:[^ false].
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2929
    ^ self asInteger isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2930
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2931
    "
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2932
     0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2933
     0.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2934
     3 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2935
     3.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2936
     4 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2937
     4.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2938
     9 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2939
     9.0 isPerfectSquare
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2940
    "
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2941
!
5645cf0c4774 #FEATURE
Claus Gittinger <cg@exept.de>
parents: 19092
diff changeset
  2942
6087
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2943
isReal
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2944
    "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
  2945
     true is returned here - the method is redefined from Object."
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2946
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2947
    ^ true
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2948
!
826b87eab740 moved isReal
Claus Gittinger <cg@exept.de>
parents: 6072
diff changeset
  2949
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2950
isZero
1557
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2951
    "return true, if the receiver is zero"
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2952
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2953
    ^ self = 0
1557
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2954
2c3c301cf48f checkin from browser
Claus Gittinger <cg@exept.de>
parents: 1422
diff changeset
  2955
    "Modified: 18.7.1996 / 12:40:49 / cg"
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2956
! !
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  2957
4659
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2958
!Number methodsFor:'tracing'!
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2959
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4659
diff changeset
  2960
traceInto:aRequestor level:level from:referrer
4659
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2961
    "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
  2962
4682
4158042a9c8c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 4659
diff changeset
  2963
    ^ aRequestor traceNumber:self level:level from:referrer
4659
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2964
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2965
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2966
! !
cdf37afc0e26 moved isLiteral - some numbers are not.
Claus Gittinger <cg@exept.de>
parents: 4637
diff changeset
  2967
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2968
!Number methodsFor:'trigonometric'!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2969
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2970
arcCos
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2971
    "return the arccosine of the receiver (in radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2972
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2973
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2974
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2975
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2976
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2977
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2978
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2979
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2980
            ^ f arcCos.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2981
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2982
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2983
    "/ slow fallback
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  2984
    ^ (self class pi / 2) - self arcSin
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2985
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2986
    "Modified: / 05-07-2017 / 17:24:32 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2987
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  2988
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2989
arcCosech
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2990
    "return the inverse hyperbolic cosecant of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2991
    "caveat: misnomer; should be called aCosech or arCosech"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2992
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2993
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  2994
    "/ retry after converting to float
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2995
    (self isLimitedPrecisionReal not
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  2996
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2997
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2998
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  2999
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3000
            ^ f arcCosech.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3001
        ].
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3002
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3003
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3004
    ^ ((1 + ((self*self)+1) sqrt) / self) ln
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3005
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3006
    "Modified: / 05-07-2017 / 17:24:56 / cg"
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3007
!
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3008
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3009
arcCosh
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3010
    "return the inverse hyperbolic cosine of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3011
    "caveat: misnomer; should be called aCosh or arCosh"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3012
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3013
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3014
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3015
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3016
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3017
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3018
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3019
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3020
            ^ f arcCosh.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3021
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3022
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3023
    "/ slow fallback
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3024
    ^ (self + (self*self-1) sqrt) ln.
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3025
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3026
    "Modified: / 05-07-2017 / 17:25:03 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3027
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3028
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3029
arcCoth
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3030
    "return the inverse hyperbolic cotangent of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3031
    "caveat: misnomer; should be called aCoth or arCoth"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3032
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3033
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3034
    "/ retry after converting to float
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3035
    (self isLimitedPrecisionReal not
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3036
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3037
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3038
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3039
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3040
            ^ f arcCoth.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3041
        ].
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3042
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3043
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3044
    ^ ((self+1) / (self-1)) ln / 2
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3045
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3046
    "Modified: / 05-07-2017 / 17:25:14 / cg"
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3047
!
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3048
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3049
arcSech
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3050
    "return the inverse hyperbolic secant of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3051
    "caveat: misnomer; should be called aSech or arSech"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3052
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3053
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3054
    "/ retry after converting to float
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3055
    (self isLimitedPrecisionReal not
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3056
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3057
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3058
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3059
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3060
            ^ f arcSech.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3061
        ].
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3062
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3063
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3064
    ^ ((1 + (1-(self*self)) sqrt) / self) ln
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3065
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3066
    "Modified: / 05-07-2017 / 17:25:22 / cg"
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3067
!
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3068
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3069
arcSin
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3070
    "return the arcsine of the receiver (in radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3071
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3072
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3073
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3074
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3075
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3076
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3077
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3078
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3079
            ^ f arcSin.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3080
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3081
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3082
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3083
    ^ self arcSin_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3084
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3085
    "Modified: / 05-07-2017 / 17:25:30 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3086
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3087
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3088
arcSinh
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3089
    "return the inverse hyperbolic sine of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3090
    "caveat: misnomer; should be called aSinh or arSinh"
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3091
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3092
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3093
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3094
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3095
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3096
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3097
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3098
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3099
            ^ f arcSinh.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3100
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3101
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3102
    "/ slow fallback
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3103
    ^ ( self + (self*self+1) sqrt ) ln
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3104
"/    ^ self arcSinh_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3105
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3106
    "Modified: / 05-07-2017 / 17:25:38 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3107
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3108
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3109
arcTan
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3110
    "return the arctangent of the receiver (as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3111
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3112
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3113
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3114
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3115
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3116
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3117
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3118
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3119
            ^ f arcTan.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3120
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3121
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3122
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3123
    ^ self arcTan_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3124
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3125
    "Modified: / 05-07-2017 / 17:25:46 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3126
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3127
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3128
arcTan2:x
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3129
    "return atan2(self,x) (as radians)"
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3130
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3131
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3132
    "/ retry after converting to float
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3133
    (self isLimitedPrecisionReal not
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3134
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3135
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3136
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3137
        (f := self asFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3138
            ^ f arcTan2:x.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3139
        ].
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3140
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3141
    "/ very slow fallback
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3142
    ^ self arcTan2_withAccuracy:self epsilon x:x
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3143
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3144
    "Modified: / 05-07-2017 / 17:26:16 / cg"
11488
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3145
!
8d948de20326 +arcTan2:
Claus Gittinger <cg@exept.de>
parents: 11460
diff changeset
  3146
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3147
arcTanh
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3148
    "return the inverse hyperbolic tangent of the receiver."
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3149
    "caveat: misnomer; should be called aTanh or arTanh"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3150
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3151
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3152
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3153
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3154
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3155
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3156
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3157
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3158
            ^ f arcTanh.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3159
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3160
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3161
    "/ slow fallback
19768
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3162
    ^ ((1 + self) / (1 - self)) ln / 2
55e36a939e1e #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 19702
diff changeset
  3163
    "/ s^ ((1 + self) ln / 2) - ((1 - self) ln / 2)
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3164
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3165
    "Modified: / 05-07-2017 / 17:26:27 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3166
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3167
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3168
cos
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3169
    "return the cosine of the receiver (interpreted as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3170
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3171
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3172
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3173
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3174
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3175
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3176
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3177
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3178
            ^ f cos.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3179
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3180
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3181
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3182
    ^ self cos_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3183
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3184
    "Modified: / 05-07-2017 / 17:26:33 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3185
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3186
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3187
cosh
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3188
    "return the hyperbolic cosine of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3189
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3190
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3191
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3192
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3193
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3194
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3195
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3196
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3197
            ^ f cosh.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3198
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3199
    ].
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3200
    "/ very slow fallback
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3201
    ^ self cosh_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3202
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3203
    "Modified: / 05-07-2017 / 17:26:39 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3204
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3205
8844
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3206
cot
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3207
    "return the cotangent of the receiver"
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3208
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3209
    ^ 1 / self tan
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3210
!
21e7c41e277e hyperbolic functions fixed
Claus Gittinger <cg@exept.de>
parents: 8830
diff changeset
  3211
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3212
sin
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3213
    "return the sine of the receiver (interpreted as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3214
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3215
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3216
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3217
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3218
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3219
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3220
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3221
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3222
            ^ f sin.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3223
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3224
    ].
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3225
    ^ self sin_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3226
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3227
    "Modified: / 05-07-2017 / 17:26:47 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3228
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3229
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3230
sinh
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3231
    "return the hyperbolic sine of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3232
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3233
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3234
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3235
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3236
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3237
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3238
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3239
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3240
            ^ f sinh.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3241
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3242
    ].
8634
2c838074e754 epsilon
Claus Gittinger <cg@exept.de>
parents: 8303
diff changeset
  3243
    ^ self sinh_withAccuracy:self epsilon
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3244
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3245
    "
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3246
        10 sinh                     -> 11013.23287470339338
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3247
        (10 exp - (-10 exp)) / 2    -> 11013.23287470339338
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3248
    "
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3249
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3250
    "Modified (comment): / 05-07-2017 / 17:32:27 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3251
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3252
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3253
tan
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3254
    "return the tangens of the receiver (interpreted as radians)"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3255
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3256
    "/ slow fallback
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3257
    ^ self sin / self cos
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3258
!
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3259
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3260
tanh
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3261
    "return the hyperbolic tangens of the receiver"
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3262
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3263
    "/ tanh is:
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3264
    "/      sinh(x)
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3265
    "/      -------
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3266
    "/      cosh(x)
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3267
    "/
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3268
    "/ which is:
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3269
    "/      (exp(x) - exp(-x)) / 2
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3270
    "/      ----------------------
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3271
    "/      (exp(x) + exp(-x)) / 2
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3272
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3273
    |exp nexp|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3274
    
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3275
    "/ if I am not a Float (or a less general lpReal),
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3276
    "/ retry after converting to float
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3277
    (self isLimitedPrecisionReal not
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3278
    or:[self generality < 1.0 generality]) ifTrue:[
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3279
        |f|
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3280
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3281
        (f := self asLongFloat) isFinite ifTrue:[
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3282
            ^ f tanh.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3283
        ].
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3284
    ].
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3285
19769
57962c690836 #DOCUMENTATION by cg
Claus Gittinger <cg@exept.de>
parents: 19768
diff changeset
  3286
    "/ very slow fallback
21988
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3287
    "/ assuming that if we arrive here, the stuff is taylor computed manually anyway,
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3288
    "/ the question is if taylor-for-exp converges faster than tailor-for-sin/cos
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3289
    "/ So it may be faster to:
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3290
    "/      ^ self sinh / self cosh
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3291
    
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3292
    exp := self exp.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3293
    nexp := self negated exp.
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3294
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3295
    ^ (exp - nexp) / (exp + nexp)
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3296
e3f286797775 #FEATURE by cg
Claus Gittinger <cg@exept.de>
parents: 21982
diff changeset
  3297
    "Modified (comment): / 05-07-2017 / 17:34:59 / cg"
7449
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3298
! !
192789c6e1c2 fallback code for trigonometric;
Claus Gittinger <cg@exept.de>
parents: 7388
diff changeset
  3299
5552
31b5cc144476 category changes
Claus Gittinger <cg@exept.de>
parents: 5360
diff changeset
  3300
!Number methodsFor:'truncation & rounding'!
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3301
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3302
detentBy: detent atMultiplesOf: grid snap: snap
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3303
    "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
  3304
     to that multiple.
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3305
     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
  3306
     in the dead zone will never be returned.
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3307
     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
  3308
     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
  3309
     and scale the value by that factor."
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3310
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3311
    | r1 r2 |
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3312
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3313
    r1 := self roundTo: grid.                    "Nearest multiple of grid"
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3314
    (self roundTo: detent) = r1 ifTrue: [^ r1].  "Snap to that multiple..."
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3315
    snap ifTrue: [^ self].                       "...or return self"
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3316
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3317
    r2 := self < r1                               "Nearest end of dead zone"
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3318
	    ifTrue: [r1 - (detent asFloat/2)]
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3319
	    ifFalse: [r1 + (detent asFloat/2)].
4895
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3320
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3321
    "Scale values between dead zones to fill range between multiples"
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3322
    ^ r1 + ((self - r2) * grid asFloat / (grid - detent))
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3323
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3324
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3325
     (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
  3326
     (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
  3327
     (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
  3328
     (-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
  3329
    "
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3330
!
cc546b082506 checkin from browser
Claus Gittinger <cg@exept.de>
parents: 4682
diff changeset
  3331
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3332
fractionPart
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3333
    "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
  3334
     i.e. the receiver minus its truncated value,
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3335
     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
  3336
7356
fe8fb0a571f2 double dispatching fixed;
Claus Gittinger <cg@exept.de>
parents: 7261
diff changeset
  3337
    ^ self - self truncated
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3338
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3339
    "
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3340
     1234.56789 fractionPart
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3341
     1.2345e6 fractionPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3342
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3343
     1.6 asLongFloat fractionPart + 1.6 asLongFloat truncated
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3344
     -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
  3345
    "
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3346
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3347
    "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
  3348
    "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
  3349
!
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3350
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3351
integerPart
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3352
    "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
  3353
     (i.e. the truncated value)"
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3354
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3355
    ^ self truncated asFloat
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3356
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3357
    "
20308
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3358
     1234.56789 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3359
     1.2345e6 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3360
     12.5 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3361
     -12.5 integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3362
     (5/3) integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3363
     (-5/3) integerPart
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3364
     (5/3) truncated
9110f117d260 ALIGNMENT code clean up
Claus Gittinger <cg@exept.de>
parents: 20142
diff changeset
  3365
     (-5/3) truncated
3900
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3366
    "
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3367
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3368
    "Created: / 28.10.1998 / 17:14:56 / cg"
6154
6cb999c5ace3 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 6143
diff changeset
  3369
    "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
  3370
! !
c3bc76767cfc added generic implementations of #fractionPart and #integerPart
Claus Gittinger <cg@exept.de>
parents: 3770
diff changeset
  3371
1892
d3564145c15c *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 1701
diff changeset
  3372
!Number class methodsFor:'documentation'!
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  3373
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  3374
version
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  3375
    ^ '$Header$'
12112
949f9713c4a5 changed: #readFrom:decimalPointCharacters:onError:
Claus Gittinger <cg@exept.de>
parents: 11944
diff changeset
  3376
!
949f9713c4a5 changed: #readFrom:decimalPointCharacters:onError:
Claus Gittinger <cg@exept.de>
parents: 11944
diff changeset
  3377
949f9713c4a5 changed: #readFrom:decimalPointCharacters:onError:
Claus Gittinger <cg@exept.de>
parents: 11944
diff changeset
  3378
version_CVS
18850
172da07a4529 #DOCUMENTATION
Claus Gittinger <cg@exept.de>
parents: 18320
diff changeset
  3379
    ^ '$Header$'
701
a309e3ef7faf checkin from browser
Claus Gittinger <cg@exept.de>
parents: 569
diff changeset
  3380
! !
15078
997a122ceeb5 class: Number
Stefan Vogel <sv@exept.de>
parents: 14495
diff changeset
  3381