RosettaCodeData/Task/Safe-addition/00-TASK.txt

26 lines
1.9 KiB
Plaintext

Implementation of   [[wp:Interval_arithmetic|interval arithmetic]]   and more generally fuzzy number arithmetic require operations that yield safe upper and lower bounds of the exact result.
For example, for an addition, it is the operations &nbsp; <big> +&uarr; </big> &nbsp; and &nbsp; <big> +&darr; </big> &nbsp; defined as: &nbsp; <big> ''a'' +&darr; ''b'' &le; ''a'' + ''b'' &le; ''a'' +&uarr; ''b''. </big>
Additionally it is desired that the width of the interval &nbsp; <big> (''a'' +&uarr; ''b'') - (''a'' +&darr; ''b'') </big> &nbsp; would be about the machine epsilon after removing the exponent part.
Differently to the standard floating-point arithmetic, safe interval arithmetic is '''accurate''' (but still imprecise).
I.E.: &nbsp; the result of each defined operation contains (though does not identify) the exact mathematical outcome.
Usually a &nbsp; [[wp:Floating_Point_Unit|FPU's]] &nbsp; have machine &nbsp; <big> +,-,*,/ </big> &nbsp; operations accurate within the machine precision.
To illustrate it, let us consider a machine with decimal floating-point arithmetic that has the precision is '''3''' decimal points.
If the result of the machine addition is &nbsp; <big> 1.23, </big> &nbsp; then the exact mathematical result is within the interval &nbsp; <big> ]1.22, 1.24[. </big>
When the machine rounds towards zero, then the exact result is within &nbsp; <big> [1.23,1.24[. </big> &nbsp; This is the basis for an implementation of safe addition.
;Task;
Show how &nbsp; <big> +&darr; </big> &nbsp; and &nbsp; <big> +&uarr; </big> &nbsp; can be implemented in your language using the standard floating-point type.
Define an interval type based on the standard floating-point one, &nbsp; and implement an interval-valued addition of two floating-point numbers considering them exact, in short an operation that yields the interval &nbsp; <big> [''a'' +&darr; ''b'', ''a'' +&uarr; ''b'']. </big>
<br><br>