Subject: [sup-talk] Util - Fixnum num_digits is wrong

From: [email-masked] (Ian Taylor)
Date: Mon, 03 Dec 2007 03:25:15 -0500

Probably wasn't causing any problems, but is wrong.

===================================================================
--- lib/sup/util.rb     (revision 737)
+++ lib/sup/util.rb     (working copy)
@@ -299,7 +299,7 @@
 class Fixnum
   def num_digits base=10
     return 1 if self == 0
-    1 + (Math.log(self) / Math.log(10)).floor
+    1 + (Math.log(self) / Math.log(base)).floor
   end
   
   def to_character

-- 
Ian Taylor

---

From: [email-masked] (Shot (Piotr Szotkowski))
Date: Mon, 3 Dec 2007 11:52:10 +0100

> +    1 + (Math.log(self) / Math.log(base)).floor

Math.log and Float#/ returning Floats means the above
approach is prone to the IEEE 754 representation inaccuracy.

Wouldn?t the below make more sense?

class Fixnum
  def num_digits base = 10
    to_s(base).size
  end
end

-- Shot
-- 
> Who wants to recommend a Usenet reader for little ol' me?
I recommend Garrett Morris, particularly if you're hard-of-hearing.
      -- jennifer friedoff and Joseph Nebus, rec.arts.tv.mst3k.misc
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 191 bytes
Desc: not available
Url : http://rubyforge.org/pipermail/sup-talk/attachments/20071203/37b62dab/attachment.bin

---

From: [email-masked] (William Morgan)
Date: Sat, 08 Dec 2007 14:13:47 -0800

Excerpts from Shot (Piotr Szotkowski)'s message of Mon Dec 03 02:52:10 -0800 2007:
> Math.log and Float#/ returning Floats means the above approach is
> prone to the IEEE 754 representation inaccuracy.
> 

Yes, but not as much as simply deleting the method. :)

-- 
William <wmorgan-sup at masanjin.net>