なかだです。

At Fri, 19 Nov 2010 14:41:12 +0900,
KISHIMOTO, Makoto wrote in [ruby-list:47640]:
> プラットフォームの浮動小数点形式が IEEE754 かどうかのチェックについては
> うまい方法がないようで、autoconf のマニュアル様によれば、
> http://www.gnu.org/software/hello/manual/autoconf/Floating-Point-Portability.html
> いまどき IEEE754 は十分にポータブルだ、とのご託宣があったので、
> 簡単に、適当な数の表現が IEEE754 と一致するかどうかを見る、ということだけ
> やっています。

Math.frexpとMath.ldexpを使えばポータブルに可能なはずです。

  class RandomFloat
    DIG = Float::MANT_DIG-1
    MAX_BIT = 1 << DIG
    DIG_MASK = MAX_BIT - 1
    def self.dbl2repr dbl
      f, e = Math.frexp(dbl)
      f = (f.abs * 2) - 1
      e += Float::MAX_EXP - 2
      e = (e << DIG) + Math.ldexp(f, DIG).to_i
      if 1.0/dbl < 0
        return -e - 1
      else
        return e
      end
    end

    def self.repr2dbl repr
      if repr < 0 then
        neg = true
        repr = -(repr + 1)
      end
      e = (repr >> DIG) - Float::MAX_EXP - DIG + 1
      f = (repr & DIG_MASK) + MAX_BIT
      f = Math.ldexp(f, e)
      f = -f if neg
      f
    end
  end

-- 
--- 僕の前にBugはない。
--- 僕の後ろにBugはできる。
    中田 伸悦