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) over 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 [email protected]wrote:
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
http://redmine.ruby-lang.org
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) over 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