flt gem for arbitrary precision

G

Giampiero Zanchi

ciao a tutti (hi to hall)

I just discoverd a gem to have arbitrary precision numbers and want to
share with the forum.

Install the gem with

gem install flt

an example script follows; it computes the square root of 2

require 'flt'
include Flt

DecNum.context.precision = 200

p DecNum(2).sqrt

produces:

DecNum('1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132226659275055927557999505011527820605715')

documentation here
http://flt.rubyforge.org/

hope this helps
 
R

Roger Pack

DecNum.context.precision = 200
p DecNum(2).sqrt

produces:

DecNum('1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132226659275055927557999505011527820605715')

Cool.
I think you can do something similar with the builtin BigDecimal class
require 'bigdecimal'=> #<BigDecimal:3076900,'0.1414213562 3730950488 0168872420 9698078569
6718753769 4807317667 9737990732 4784621070 3885038753 4327641572
7350138462 3091229702 4924836055 8507372126 4412149709 9935831413
2226659275 0559275579 9950501152 7820605714 7010955997
1605970125E1',224(224)>

Of course, that's decimal, so flt might be more precise.

-rp
 
R

Robert Klemme

ciao a tutti (hi to hall)

I just discoverd a gem to have arbitrary precision numbers and want to
share with the forum.

Install the gem with

gem install flt

an example script follows; it computes the square root of 2

require 'flt'
include Flt

DecNum.context.precision = 200

p DecNum(2).sqrt

produces:

DecNum('1.4142135623730950488016887242096980785696718753769480731766797379907324784621070388503875343276415727350138462309122970249248360558507372126441214970999358314132226659275055927557999505011527820605715')

documentation here
http://flt.rubyforge.org/

What's the difference (precision? performance?) vs. doing

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> BigDecimal("2").sqrt(200).to_s
=>
"0.1414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970125E1"
irb(main):003:0> BigDecimal("2").sqrt(200)
=> #<BigDecimal:93215a4,'0.1414213562 3730950488 0168872420 9698078569
6718753769 4807317667 9737990732 4784621070 3885038753 4327641572
7350138462 3091229702 4924836055 8507372126 4412149709 9935831413
2226659275 0559275579 9950501152 7820605714 7010955997
1605970125E1',224(224)>
irb(main):004:0>

?

Kind regards

robert
 
G

Giampiero Zanchi

Robert said:
What's the difference (precision? performance?) vs. doing

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> BigDecimal("2").sqrt(200).to_s
=>
"0.1414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970125E1"
irb(main):003:0> BigDecimal("2").sqrt(200)
=> #<BigDecimal:93215a4,'0.1414213562 3730950488 0168872420 9698078569
6718753769 4807317667 9737990732 4784621070 3885038753 4327641572
7350138462 3091229702 4924836055 8507372126 4412149709 9935831413
2226659275 0559275579 9950501152 7820605714 7010955997
1605970125E1',224(224)>
irb(main):004:0>

?

Kind regards

robert

maybe no difference ?
I didn't know of BigDecimal neither
sorry for my ignorance
 
R

Robert Klemme

2010/4/29 Giampiero Zanchi said:
maybe no difference ?
I didn't know of BigDecimal neither
sorry for my ignorance

No problem. Maybe the gem you've found is a nice wrapper around
BigDecimal with better #inspect and #to_s. In any case I thought it
good to know that the standard lib contains something similar. :)

Kind regards

robert
 
G

Giampiero Zanchi

you can find the section

DecNum vs BigDecimal

at the bottom of the documentation page

http://flt.rubyforge.org/

DecNum solves some of the difficulties of using BigDecimal.

One of the major problems with BigDecimal is that it‘s not easy to
control the number of significant digits of the results. While addition,
subtraction and multiplication are exact (unless a limit is used),
divisions will need to be passed precision explicitly or else an
indeterminate number of significant digits will be lost. Part of the
problem is that numbers don‘t keep track of its precision (0.1000 is not
distinguishable from 0.1.)

.....
 
M

Michael W Ryder

Robert said:
What's the difference (precision? performance?) vs. doing

irb(main):001:0> require 'bigdecimal'
=> true
irb(main):002:0> BigDecimal("2").sqrt(200).to_s
=>
"0.1414213562373095048801688724209698078569671875376948073176679737990732478462107038850387534327641572735013846230912297024924836055850737212644121497099935831413222665927505592755799950501152782060571470109559971605970125E1"

irb(main):003:0> BigDecimal("2").sqrt(200)
=> #<BigDecimal:93215a4,'0.1414213562 3730950488 0168872420 9698078569
6718753769 4807317667 9737990732 4784621070 3885038753 4327641572
7350138462 3091229702 4924836055 8507372126 4412149709 9935831413
2226659275 0559275579 9950501152 7820605714 7010955997
1605970125E1',224(224)>
irb(main):004:0>

?

Kind regards

robert
If my reading of the documentation is correct the difference is how the
intermediate results are stored. Dividing 1 by 3 with a precision of 2
would result in 0.33 versus 0.3333333... If you print a commission rate
of 33.33% on a form and a charge of $5,0000, you want the amount to show
$1,666.50 (5000 * .3333), not $1,666.67 (5,0000 * 1/3) as a lot of
people will complain that your figures are wrong.
I use fixed precision for all my work as it deals with money and
everything has to match to the penny.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,754
Messages
2,569,522
Members
44,995
Latest member
PinupduzSap

Latest Threads

Top