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