Mailing List Archive: 49091 messages
  • Home
  • Script library
  • AltME Archive
  • Mailing list
  • Articles Index
  • Site search
 

[REBOL] rounding and precision

From: lmecir::mbox::vol::cz at: 5-Apr-2002 9:24

Hi all, I was experimenting with rounding again and noticed this: mod1: function [ {Compute a non-negative remainder} a [number!] b [number!] ] [r] [ either negative? r: a // b [r + abs b] [r] ] mod2: func [ {Compute a non-negative remainder} a [number!] b [number!] ] [ a // b + (abs b) // b ] round: func [ {Round a number} n [number!] /to factor [number!] {the number a multiply of which to round to} ] [ if not to [factor: 1] n: 0.5 * factor + n n - mod n factor ] foreach f [mod1 mod2] [ mod: get f print ["mod:" mold :mod] foreach num [-5e-3 -4e-3 -3e-3 -2e-3 -1e-3 0 1e-3 2e-3 3e-3 4e-3] [ print ["num:" num "rounded:" round/to num 1e-2] ] ] The results are: mod: func [ "Compute a non-negative remainder" a [number!] b [number!] /local r][ either negative? r: a // b [r + abs b] [r] ] num: -5E-3 rounded: 0 num: -4E-3 rounded: 0 num: -3E-3 rounded: 0 num: -2E-3 rounded: 0 num: -1E-3 rounded: 0 num: 0 rounded: 0 num: 1E-3 rounded: 0 num: 2E-3 rounded: 0 num: 3E-3 rounded: 0 num: 4E-3 rounded: 0 mod: func [ "Compute a non-negative remainder" a [number!] b [number!] ][ a // b + (abs b) // b ] num: -5E-3 rounded: 0 num: -4E-3 rounded: 8.67361737988404E-19 num: -3E-3 rounded: 0 num: -2E-3 rounded: -8.67361737988404E-19 num: -1E-3 rounded: 0 num: 0 rounded: 8.67361737988404E-19 num: 1E-3 rounded: 0 num: 2E-3 rounded: -8.67361737988404E-19 num: 3E-3 rounded: -1.73472347597681E-18 num: 4E-3 rounded: -1.73472347597681E-18 Cheers L