dinsdag, 20 augustus, 2019

  •   +31 180 695 777 (NL) +32 3 297 70 07 (BE) ----------Lasal Latest Version: 0073_1----------
  •   

 hans vanzijpKijk maar eens even hier naar;

Gelukkig is hier een norm voor, de IEEE 754 en SIGMATEK volgt die norm dan ook.
Vaak is het simpel, 1,4 wordt afgerond 1 en 1,6 wordt 2.
Het kantelpunt ligt bij 1,5 en daar bestaan dan ook verschillende varianten.
Volgens de genoemde norm wordt een half afgerond naar de dichtstbijzijnde even integer.

Dus 1,5 wordt 2, en 2,5 wordt ook 2. Dat laatste is misschien verrassend.

Op Wikipedia is meer te vinden over de afronding: http://en.wikipedia.org/wiki/Rounding

Over de IEEE norm wordt daar verteld:

Round half to even

A tie-breaking rule that is less biased is round half to even, namely:

·         If the fraction ofyis 0.5, thenqis theeveninteger nearest to y.

Thus, for example, +23.5 becomes +24, as does +24.5; while −23.5 becomes −24, as does −24.5.

This method treats positive and negative values symmetrically, and is therefore free of sign bias. More importantly, for reasonable distributions ofyvalues, the expected (average) value of the rounded numbers is the same as that of the original numbers. However, this rule will introduce a towards-zero bias when y - 0.5 is even, and a towards-infinity bias for when it's odd.

This variant of the round-to-nearest method is also calledunbiased rounding,convergent rounding,statistician's rounding,Dutch rounding,Gaussian rounding,odd-even rounding,[3]bankers' rounding,broken rounding, orDDR roundingand is widely used in bookkeeping.

This is the default rounding mode used inIEEE 754computing functions and operators.

Bij rekenen in integer’s of dint’s zal overigens geen afronding plaatsvonden, alleen het “hele” gedeelte van de uitkomst wordt gebruikt. Dus in dint’s: 19/10 krijgt als uitkomst 1.

Sinds een tijdje is het bij Sigmatek ook mogelijk om met long-real’s te rekenen. Het getal wordt dan in 8 bytes opgeslagen en is daardoor nauwkeurig dan een 4 bytes real. Het gebruik van long-real’s kan met name een verschil maken bij goniometrische berekeningen.

Bijvoorbeeld:

  r_1 := acos(sin(0.754));

  r_2 := asin(cos(r_1));

Bij berekening in real’s is r_2: 0.816 796 4
In long real’s is de uitkomst beter: 0.753 999 9

Johan heeft ook al eens geschreven over de long real’s, zie hiervoor Lasal Tip nr. 11