multi precision arithmetic
Marc Ernst Eddy van Woerkom
Marc.Vanwoerkom@REDACTED
Tue Apr 15 16:57:02 CEST 2003
> 0x34FA.FF21 * 100.566
Yes.
> ? And that you can use any programming language?
Of course. The final implementation is in a language so outdated I
don't dare to mention it here. :)
> You can probably use the rational numbers in the GMP C library
I would rather go for their integers which are some
[sign, a_n, .. , a_0, a_-1, .., a_-k]
representation. a_i is the coefficient/digit to b^i.
k ist the number of guaranteed digits behind the radix point,
in case of non terminating divisions like 1/3.
But GNU bc and also GMP (if I am not wrong) seem to do the calculation
in decimal base and do base conversions before and after.
The problem is precision (k or scale) one tells that software to guarantee
is given for decimal rounding:
$bc
scale=10
ibase=16
AF.F
175.9375000000
obase=10 # note this means hex 10 = dec 16!
AF.F
AF.F0000000 # 10 digits dec seen to be about 8 digits hex
scale=1
AF.F # my input
AF.E # output 175.9 because this is 1 digit *decimal* rounding!
A workaround is a formula that tells you how many digits precision
in the intended base are equivalent to p digits in decimal representation:
t = CEIL((p * log(10) / log(base))) + 3
Funny is that I found nothing that does the maths directly in base 29
for example.
> Writing a small package in Erlang to do rational number arithmetics
> without any demands on speed is probably a fun exercise
I just want an independend implementation for testing purposes.
But what is curious with Erlang is that it has already
some rudimenatary aribitrary precision maths built in.
I just don't find the docs and I don't know why it
was put in the first place because it seems to feature
just a little bit of the usual maths of that kind.
Regards,
Marc
More information about the erlang-questions
mailing list