Bug #4022
closedMistake in this cocient of logs followed by %1
Description
=begin
I get a wrong answer when I apply the following expression: Math.log(4913)/Math.log(17) % 1
This happens in ruby 1.9.1 and in ruby 1.8.7
With other set of numbers the answers are correct
irb(main):001:0> Math.log(4913)/Math.log(17) % 1
=> 1.0
irb(main):002:0> Math.log(4913)/Math.log(17)
=> 3.0
irb(main):003:0> 3.0 % 1
=> 0.0
irb(main):004:0> (Math.log(4913)/Math.log(17)) % 1
=> 1.0
=end
Updated by judofyr (Magnus Holm) about 14 years ago
=begin
That's just how floats work:
Math.log(4913)/Math.log(17) == 3.0
=> false
"%.50f" % (Math.log(4913)/Math.log(17))
=> "2.99999999999999955591079014993738383054733276367188"
"%.50f" % 3.0
=> "3.00000000000000000000000000000000000000000000000000"
// Magnus Holm
On Wed, Nov 3, 2010 at 17:52, Daniel Silberschmidt redmine@ruby-lang.orgwrote:
Bug #4022: Mistake in this cocient of logs followed by %1
http://redmine.ruby-lang.org/issues/show/4022Author: Daniel Silberschmidt
Status: Open, Priority: Normal
Target version: 1.9.1
ruby -v: 1.9.1I get a wrong answer when I apply the following expression:
Math.log(4913)/Math.log(17) % 1
This happens in ruby 1.9.1 and in ruby 1.8.7
With other set of numbers the answers are correctirb(main):001:0> Math.log(4913)/Math.log(17) % 1
=> 1.0
irb(main):002:0> Math.log(4913)/Math.log(17)
=> 3.0
irb(main):003:0> 3.0 % 1
=> 0.0
irb(main):004:0> (Math.log(4913)/Math.log(17)) % 1
=> 1.0
That's just how floats work:
Bug #4022: Mistake in this cocient of logs followed by %1
http://redmine.ruby-lang.org/issues/show/4022
Author: Daniel Silberschmidt
Status: Open, Priority: Normal
Target version: 1.9.1
ruby -v: 1.9.1
I get a wrong answer when I apply the following expression: Math.log(4913)/Math.log(17) % 1
This happens in ruby 1.9.1 and in ruby 1.8.7
With other set of numbers the answers are correct
irb(main):001:0> Math.log(4913)/Math.log(17) % 1
=> 1.0
irb(main):002:0> Math.log(4913)/Math.log(17)
=> 3.0
irb(main):003:0> 3.0 % 1
=> 0.0
irb(main):004:0> (Math.log(4913)/Math.log(17)) % 1
=> 1.0
----------------------------------------
http://redmine.ruby-lang.org
=end
Updated by naruse (Yui NARUSE) about 14 years ago
- Status changed from Open to Rejected
=begin
Learn floating point numbers.
What Every Computer Scientist Should Know About Floating-Point Arithmetic
http://docs.sun.com/source/806-3568/ncg_goldberg.html
http://wiki.github.com/rdp/ruby_tutorials_core/ruby-talk-faq#floats_imprecise
http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
=end