[plt-scheme] Numerical precision
From: Jaime Vargas (jev at mac.com)
Date: Thu Mar 12 12:11:04 EDT 2009 |
|
I ended following Richard's advice and round only when calculating
interest. This a lot simpler that the parameterize solution and does
the job.
(define (make-round:p numerical-precision)
(define N (expt 10 numerical-precision))
(define 1/N (/ 1 N))
(lambda (x)
(* 1/N (round (* x N)))))
(define round:p (make-round:p 2))
Thanks for all the input,
-- Jaime
On Mar 11, 2009, at 10:36 PM, Richard Cleis wrote:
> You want to do rounding or truncation according to the requirements
> of the simulation. He says that he is doing personal financial
> simulations, which implies to me that after each operation the
> simulation keeps only a certain precision (like a person would enter
> only n digits beyond the decimal in a spreadsheet, or write them
> from a calculator display.)
>
> Perhaps not :)
>
> rac
>
> On Mar 11, 2009, at 8:25 PM, Henk Boom wrote:
>
>> 2009/3/11 Richard Cleis <rcleis at mac.com>:
>>> You could consider computing everything with integers that
>>> represent the
>>> precision in your sim. (e.g., $1.23 would be 123 cents or 1230
>>> mills or
>>> whatever.) After a division or multiply, rounding or truncation
>>> can be used
>>> to create a new integer with the algorithm that your sim requires.
>>> Converting between the sim integers and $nn.nn needs to occur only
>>> when you
>>> want to display values or accept input.
>>
>> This does not avoid the associativity problems though, nor the
>> problems of accumulation of error. You really want to do rounding
>> only
>> when necessary.
>>
>> Henk
>> _________________________________________________
>> For list-related administrative tasks:
>> http://list.cs.brown.edu/mailman/listinfo/plt-scheme
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme