[plt-scheme] Numerical precision

From: Jaime Vargas (jev at mac.com)
Date: Wed Mar 11 12:31:54 EDT 2009


I am doing some personal financial simulations and need math procedures
that keep N digits of numerical precision. For this I am using  
Scheme's exact
numbers and wrote the attached naive implementation.

Given that I am no math guru is there something that I should worry  
this implementation? Also, I would like to optimize the round:N  
procedure to
avoid calculating N and 1/N all the time. I thought that LET will  
help, but it did


Jaime E Vargas

#lang scheme

(provide numerical-precision
          (rename-out [round:N round]
                      [*:N *]
                      [/:N /]
                      [+:N +]
                      [-:N -]))

(define numerical-precision (make-parameter 2))

(define (N)
   (expt 10 (numerical-precision)))

(define (1/N)
   (/ 1 (N)))

(define (round:N x)
   (* (1/N) (round (* x (N)))))

(define (*:N . nums)
   (round:N (apply * nums)))

(define (/:N . nums)
   (round:N (apply / nums)))

(define (+:N . nums)
   (round:N (apply + nums)))

(define (-:N . nums)
   (round:N (apply - nums)))

Posted on the users mailing list.