MeasurementValue.st
author Claus Gittinger <cg@exept.de>
Fri, 16 Jan 2009 13:18:06 +0100
changeset 11465 3f5fc7aace0f
parent 11459 01ad9aa9217d
child 11466 3b67c6756dad
permissions -rw-r--r--
changed #'='
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     1
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     2
 COPYRIGHT (c) 2007 by eXept Software AG
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     3
              All Rights Reserved
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     4
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     5
 This software is furnished under a license and may be used
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     6
 only in accordance with the terms of that license and with the
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     7
 inclusion of the above copyright notice.   This software may not
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     8
 be provided or otherwise made available to, or used by, any
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
     9
 other person.  No title to or ownership of the software is
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    10
 hereby transferred.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    11
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    12
"{ Package: 'stx:libbasic' }"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    13
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    14
Number subclass:#MeasurementValue
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    15
	instanceVariableNames:'value minValue maxValue'
11465
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
    16
	classVariableNames:'MeasurementValueZero'
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    17
	poolDictionaries:''
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    18
	category:'Magnitude-Numbers'
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    19
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    20
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    21
!MeasurementValue class methodsFor:'documentation'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    22
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    23
copyright
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    24
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    25
 COPYRIGHT (c) 2007 by eXept Software AG
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    26
              All Rights Reserved
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    27
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    28
 This software is furnished under a license and may be used
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    29
 only in accordance with the terms of that license and with the
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    30
 inclusion of the above copyright notice.   This software may not
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    31
 be provided or otherwise made available to, or used by, any
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    32
 other person.  No title to or ownership of the software is
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    33
 hereby transferred.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    34
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    35
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    36
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    37
documentation
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    38
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    39
    A MeasurementValue is a numeric value with an error, such as returned
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    40
    by measurement devices (Volt-Meter). For example, if a measurement-device has
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    41
    an error of 10%, a measured value of 20 could be any value between 18 and 22.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    42
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    43
    Arithmetic operations keep track of the error; if any operand is a MeasurementValue,
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    44
    the operation returns a MeasurementValue as result.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    45
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    46
    This class is possibly unfinished and needs more arithmetic methods.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    47
    For now, the stuff found here represents our needs and more might be added in the future.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    48
11456
3ab3ea28c8f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10825
diff changeset
    49
    Also notice, that instances do not keep the error as a fraction, but instead a min. and maxValue.
3ab3ea28c8f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10825
diff changeset
    50
    That means, that we can represent tha case where the absolute error values are different in
3ab3ea28c8f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10825
diff changeset
    51
    the positive and negative directions.
3ab3ea28c8f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10825
diff changeset
    52
    I am not sure if this is more flexibility than needed in the long run.
3ab3ea28c8f4 *** empty log message ***
Claus Gittinger <cg@exept.de>
parents: 10825
diff changeset
    53
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    54
    [author:]
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    55
        Claus Gittinger
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    56
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    57
    [see also:]
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    58
        Number
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    59
        Float ShortFloat Fraction FixedPoint Integer Complex
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    60
        FloatArray DoubleArray
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    61
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    62
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    63
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    64
examples
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    65
"
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    66
    Notice, how the errors accumulate...
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    67
                                                                        [exBegin]
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    68
    |voltage current power|
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    69
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    70
    voltage := MeasurementValue value:10 error:0.05.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    71
    current := MeasurementValue value:2 error:0.1.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    72
    power := voltage * current.
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    73
    power.                   
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    74
    power minValue.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    75
    power maxValue.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    76
                                                                        [exEnd]
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    77
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    78
                                                                        [exBegin]
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    79
    |voltage current power|
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    80
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    81
    voltage := MeasurementValue value:10 error:0.05.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    82
    current := 2.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    83
    power := voltage * current.
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    84
    power
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    85
                                                                        [exEnd]
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    86
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    87
                                                                        [exBegin]
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    88
    |voltage doubleVoltage|
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    89
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    90
    voltage := MeasurementValue value:10 error:0.1.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    91
    doubleVoltage := 2 * voltage.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    92
    doubleVoltage
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
    93
                                                                        [exEnd]
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    94
"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    95
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    96
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    97
!MeasurementValue class methodsFor:'instance creation'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    98
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
    99
value:arg1 error:arg2
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   100
    "return a new measurementValue with a given value and an error (fraction)"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   101
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   102
    ^ self new value:arg1 error:arg2
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   103
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   104
    "
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   105
     MeasurementValue value:10 error:0.2 
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   106
    "
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   107
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   108
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   109
value:arg1 minValue:arg2 maxValue:arg3
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   110
    "return a new measurementValue with a given value and an error given as min-max values.
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   111
     Use this, if the error is not the same in both directions"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   112
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   113
    ^ self new value:arg1 minValue:arg2 maxValue:arg3
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   114
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   115
    "a power of 10 error:
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   116
     MeasurementValue value:5 minValue:1 maxValue:10   
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   117
    "
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   118
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   119
11465
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   120
!MeasurementValue class methodsFor:'constants'!
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   121
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   122
zero
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   123
    "return the neutral element for addition (0 +/- 0)"
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   124
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   125
    MeasurementValueZero isNil ifTrue:[
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   126
        MeasurementValueZero := self value:0 minValue:0 maxValue:0
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   127
    ].
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   128
    ^ MeasurementValueZero
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   129
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   130
    "
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   131
     self zero
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   132
    "
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   133
! !
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   134
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   135
!MeasurementValue methodsFor:'accessing'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   136
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   137
maxValue
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   138
    "the maximum possible value, considerung what has been measured and what the measurement error is"
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   139
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   140
    ^ maxValue
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   141
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   142
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   143
minValue
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   144
    "the minimum possible value, considerung what has been measured and what the measurement error is"
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   145
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   146
    ^ minValue
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   147
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   148
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   149
value
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   150
    "the measured value"
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   151
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   152
    ^ value
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   153
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   154
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   155
!MeasurementValue methodsFor:'arithmetic'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   156
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   157
* aNumber
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   158
    ^ MeasurementValue new
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   159
        value:(value * aNumber value)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   160
        minValue:(minValue * aNumber minValue)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   161
        maxValue:(maxValue * aNumber maxValue)
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   162
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   163
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   164
+ aNumber
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   165
    ^ MeasurementValue new
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   166
        value:(value + aNumber value)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   167
        minValue:(minValue + aNumber minValue)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   168
        maxValue:(maxValue + aNumber maxValue)
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   169
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   170
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   171
- aNumber
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   172
    ^ MeasurementValue new
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   173
        value:(value - aNumber value)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   174
        minValue:(minValue - aNumber maxValue)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   175
        maxValue:(maxValue - aNumber minValue)
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   176
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   177
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   178
/ aNumber
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   179
    ^ MeasurementValue new
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   180
        value:(value / aNumber value)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   181
        minValue:(minValue / aNumber maxValue)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   182
        maxValue:(maxValue / aNumber minValue)
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   183
! !
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   184
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   185
!MeasurementValue methodsFor:'coercing & converting'!
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   186
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   187
+/- error
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   188
    "return a MeasurementValue with the given error."
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   189
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   190
    "/ what should I do here - take the new error,
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   191
    "/ or multiply them ????
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   192
    self error.
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   193
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   194
    minValue := value - error.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   195
    maxValue := value + error.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   196
!
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   197
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   198
coerce:aNumber
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   199
    ^ MeasurementValue value:aNumber minValue:aNumber maxValue:aNumber
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   200
        
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   201
!
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   202
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   203
generality
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   204
    "/ adding 1 has the subtle side effect of enforcing a call to cuerce:
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   205
    "/ for mixed type operaions (i.e. Int * MeasurementValue).
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   206
    "/ try it.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   207
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   208
    ^ value generality + 1 
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   209
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   210
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   211
!MeasurementValue methodsFor:'comparing'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   212
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   213
< aNumber
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   214
    ^ maxValue < aNumber
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   215
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   216
11465
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   217
= aNumber
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   218
    "hard to tell, what we want here..."
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   219
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   220
    ^ value = aNumber value
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   221
    and:[ minValue = aNumber minValue
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   222
    and:[ maxValue = aNumber maxValue ]]
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   223
!
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   224
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   225
lessFromFloat:aFloat
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   226
    "aFloat < self ?"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   227
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   228
    ^ aFloat < minValue
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   229
!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   230
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   231
lessFromInteger:anInteger
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   232
    "anInteger < self ?"
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   233
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   234
    ^ anInteger < minValue
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   235
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   236
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   237
!MeasurementValue methodsFor:'printing & storing'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   238
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   239
printOn:aStream
11459
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   240
    aStream nextPutAll:'('.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   241
    (maxValue-value) = (value-minValue) ifTrue:[
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   242
        value storeOn:aStream.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   243
        aStream nextPutAll:' +/- '.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   244
        (maxValue-value) storeOn:aStream
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   245
    ] ifFalse:[
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   246
        aStream nextPutAll:'MeasurementValue value:'.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   247
        value storeOn:aStream.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   248
        aStream nextPutAll:' minValue:'.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   249
        minValue storeOn:aStream.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   250
        aStream nextPutAll:' maxValue:'.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   251
        maxValue storeOn:aStream.
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   252
    ].
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   253
    ')' printOn:aStream.
11459
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   254
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   255
    "
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   256
     (5 +/- 1) storeString 
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   257
     (MeasurementValue value:5 minValue:3 maxValue:8) storeString 
01ad9aa9217d better printing
Claus Gittinger <cg@exept.de>
parents: 11457
diff changeset
   258
    "
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   259
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   260
11457
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   261
!MeasurementValue methodsFor:'private accessing'!
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   262
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   263
value:valueArg error:errorFraction 
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   264
    self 
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   265
        value:valueArg
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   266
        minValue:(valueArg * (1-errorFraction))
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   267
        maxValue:(valueArg * (1+errorFraction)). 
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   268
!
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   269
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   270
value:valueArg minValue:minValueArg maxValue:maxValueArg 
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   271
    value := valueArg.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   272
    minValue := minValueArg.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   273
    maxValue := maxValueArg.
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   274
! !
5ff638783ee0 double dispatch (actually coercing) support
Claus Gittinger <cg@exept.de>
parents: 11456
diff changeset
   275
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   276
!MeasurementValue methodsFor:'testing'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   277
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   278
between:min and:max
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   279
    minValue < min ifTrue:[^ false].
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   280
    maxValue > max ifTrue:[^ false].
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   281
    ^ true
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   282
! !
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   283
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   284
!MeasurementValue class methodsFor:'documentation'!
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   285
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   286
version
11465
3f5fc7aace0f changed #'='
Claus Gittinger <cg@exept.de>
parents: 11459
diff changeset
   287
    ^ '$Header: /cvs/stx/stx/libbasic/MeasurementValue.st,v 1.5 2009-01-16 12:18:06 cg Exp $'
10825
332b3ea2f8d6 initial checkin
Claus Gittinger <cg@exept.de>
parents:
diff changeset
   288
! !