RFLOAT_VALUE(val), DOUBLE2NUM(dbl)

e$B!!$5$5$@$G$9!%e(B

e$B!!:G6a$Oe(B RHoge
e$B$N%(%s%H%j$r%^%/%m$r2p$7$F%"%/%;%9$G$-$k$h$&$K$9$k$Ne(B
e$B$,N.9T$N$h$&$G$9$N$G!$e(BRFloat e$B$b$=$&$7$^$;$s$+!%e(B

e$B!!e(Bext/ e$B0J2<$G$O$[$H$s$I%"%/%;%9$7$F$$$J$+$C$?$N$G!$e(Bcore
e$B$@$1D>$;$P$he(B
e$B$/!$Hf3SE*4JC1$KJQ99$G$-$^$7$?!%e(B

e$B!!$I$&$G$7$g$&$+!%e(B

$ svn diff include/ruby/ruby.h
Index: include/ruby/ruby.h

— include/ruby/ruby.h (revision 13910)
+++ include/ruby/ruby.h (working copy)
@@ -449,9 +449,12 @@
#define RMODULE_M_TBL(m) RCLASS_M_TBL(m)
#define RMODULE_SUPER(m) RCLASS_SUPER(m)

+#define RFLOAT_VALUE(v) (RFLOAT(v)->double_value)
+#define DOUBLE2NUM(v) rb_float_new(v)
+
struct RFloat {
struct RBasic basic;

  • double value;
  • double double_value;
    };

#define ELTS_SHARED FL_USER2

e$B!!0U?^$H$7$F$O!$:#8ee(B 64bit e$B%^%7%s>e$GG@:EYIbF0>.?tE@?t$re(B
Fixnum e$B$Ne(B
e$B$h$&$KKd$a9~$a$J$$$+!$$H;W$C$F$*$j!$$=$NI[@P$G$9!%e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:32268] RFLOAT_VALUE(val), DOUBLE2NUM(dbl)”
on Wed, 14 Nov 2007 00:08:13 +0900, SASADA Koichi [email protected]
writes:

|e$B!!:G6a$Oe(B RHoge e$B$N%(%s%H%j$r%^%/%m$r2p$7$F%“%/%;%9$G$-$k$h$&$K$9$k$Ne(B
|e$B$,N.9T$N$h$&$G$9$N$G!$e(BRFloat e$B$b$=$&$7$^$;$s$+!%e(B
|
|e$B!!e(Bext/ e$B0J2<$G$O$[$H$s$I%”%/%;%9$7$F$$$J$+$C$?$N$G!$e(Bcore e$B$@$1D>$;$P$he(B
|e$B$/!$Hf3SE*4JC1$KJQ99$G$-$^$7$?!%e(B
|
|e$B!!$I$&$G$7$g$&$+!%e(B

e$B$I$&$>!#e(BRubiniuse$B$N?M$?$A$b4n$V$G$7$g$&!#e(B

SASADA Koichi wrote:

e$B!!0U?^$H$7$F$O!$:#8ee(B 64bit e$B%^%7%s>e$GG@:EYIbF0>.?tE@?t$re(B Fixnum e$B$Ne(B
e$B$h$&$KKd$a9~$a$J$$$+!$$H;W$C$F$*$j!$$=$NI[@P$G$9!%e(B

Fixnume$B$Oe(Blonge$B$h$j$bI}$,69$$$o$1$G$9$,!"e(BFloate$B$be(Bdoublee$B$h$j$bI}$,69$/$J$k$se(B
e$B$G$9$+e(B?

e$B$=$l$O?tCM1i;;$G$1$C$3$&:$$j$=$&$Je(B

SASADA Koichi wrote:

e$B!!:#9M$($F$k$N$O!$e(Bexp e$B$,>.$5$1$l$PKd$a9~$_!$Bg$-$1$l$P:#$^$GDL$j%]%$e(B
e$B%s%?!$$H$$$&$N$O$I$&$@$m$&!$$H$$$&0F$G$9!%0lHV$b$a$=$&$J$N$OKd$a9~$se(B
e$B$@$H$-$NCM$N%/%i%9L>$J5$$,$7$F$$$^$9$,!Je(BFixFloate$B!*!K!%e(B

e$B$=$l$J$s$+$*$$$7$/$J$$5$$,$7$^$9$M!#$?$V$s!#26$NB-$j$J$$F,$G9M$($?$H$3$me(B
e$B$K$h$k$He(B

#define FIXFLOAT_MAX 1.0e(e$BE,Ev$JCMe(B)
#define DOUBLE2NUM(v)
(isfinate(v) ?
(v > 0 ?
(v > FIXFLOAT_MAX ?
rb_float_new(v) :
(e$B$J$s$+Kd$a9~$<0e(B) \ ) : \ (v < -FIXFLOAT_MAX ? \ rb_float_new(v) : \ (e$B$J$s$+Kd$a9~$<0e(B)
)
) :
rb_float_new(v)
)

e$B$3$N$/$i$$J#;($K$J$k$s$G$9$1$I$b!#K\Ev$KB.$$$s$G$9$+$3$l!#e(B

e$B!!<B:]$N:GE,2=$NOC$O!$$3$N$"$?$j$O!$e(B1.9.1 e$B$N8e$G$f$C$/$j9M$($k$H$$$$e(B
e$B$s$8$c$J$$$+$H!%:#2s$O!$@h$K%$%s%?!<%U%’!<%9$@$1$=$m$($F$*$-$^$7$ge(B
e$B$&!$$H$$$&Ds0F$G$9!%e(B

e$B$Y$D$K%$%s%?!<%U%’!<%9$O$"$C$F$b$$$$$s$8$c$J$$$G$9$+!#$=$3$K$OFC$K$O0U8+e(B
e$B$"$j$^$;$s!#e(B

e$B!!$5$5$@$G$9!%e(B

Urabe S. wrote:

Fixnume$B$Oe(Blonge$B$h$j$bI}$,69$$$o$1$G$9$,!"e(BFloate$B$be(Bdoublee$B$h$j$bI}$,69$/$J$k$se(B
e$B$G$9$+e(B?

e$B$=$l$O?tCM1i;;$G$1$C$3$&:$$j$=$&$Je(B

e$B!!:#9M$($F$k$N$O!$e(Bexp
e$B$,>.$5$1$l$PKd$a9~$_!$Bg$-$1$l$P:#$^$GDL$j%]%$e(B
e$B%s%?!$$H$$$&$N$O$I$&$@$m$&!$$H$$$&0F$G$9!%0lHV$b$a$=$&$J$N$OKd$a9~$se(B
e$B$@$H$-$NCM$N%/%i%9L>$J5$$,$7$F$$$^$9$,!Je(BFixFloate$B!*!K!%e(B

e$B!!<B:]$N:GE,2=$NOC$O!$$3$N$"$?$j$O!$e(B1.9.1
e$B$N8e$G$f$C$/$j9M$($k$H$$$$e(B
e$B$s$8$c$J$$$+$H!%:#2s$O!$@h$K%$%s%?!<%U%’!<%9$@$1$=$m$($F$*$-$^$7$ge(B
e$B$&!$$H$$$&Ds0F$G$9!%e(B

e$B:XF#$H?=$7$^$9!#e(B

On Wed, 14 Nov 2007 00:08:13 +0900
SASADA Koichi [email protected] wrote:

struct RFloat {
struct RBasic basic;

  • double value;
  • double double_value;
    };

e$B$3$l$O!“%a%s%P$KD>@?($l$k%3!<%I$r%3%s%Q%$%k;~$K%(%i!<$K$9$k$3$H$Ge(B
e$B!V%^%/%m$r;H$o$6$k$rF@$J$$!W>u67$r:n$j=P$9=P$9L\E*$G$O$J$$$+!”$He(B
e$B<Y?d$7$^$7$?!#$b$7?dB,$,@5$7$/!"$+$D$=$l$,K>$^$7$$$H$*9M$($J$i$P!"e(BFloat
e$B$K9g$o$;$Fe(BArraye$B$be(B

struct RArray {
struct RBasic basic;

  • long len;
  • long long_len;
    union {
    long capa;
    VALUE shared;
    } aux;
  • VALUE *ptr;
  • VALUE *value_ptr;
    };
    -#define RARRAY_LEN(a) RARRAY(a)->len
    -#define RARRAY_PTR(a) RARRAY(a)->ptr
    +#define RARRAY_LEN(a) RARRAY(a)->long_len
    +#define RARRAY_PTR(a) RARRAY(a)->value_ptr
    :
    :

e$B$H$+$9$k$Y$-$G$7$g$&$+e(B?

e$B$J$+$@$G$9!#e(B

At Wed, 14 Nov 2007 01:37:06 +0900,
Tadashi S. wrote in [ruby-dev:32275]:

struct RArray {
struct RBasic basic;

  • long len;
  • long long_len;

double_e$B$H$+e(Blong_e$B$O$A$g$C$HL50UL#2a$.$k$s$8$c$J$$$+$H$$$&5$$,$7$^e(B
e$B$9!#$;$a$Fe(Bfloat_valuee$B$H$+e(Barray_lene$B$H$+$K$7$F$[$7$$$H;W$$$^$9!#e(B

e$B$^$D$b$He(B e$B$f$-$R$m$G$9e(B

In message “Re: [ruby-dev:32275] Re: RFLOAT_VALUE(val), DOUBLE2NUM(dbl)”
on Wed, 14 Nov 2007 01:37:06 +0900, Tadashi S.
[email protected] writes:

|On Wed, 14 Nov 2007 00:08:13 +0900
|SASADA Koichi [email protected] wrote:
|
|> struct RFloat {
|> struct RBasic basic;
|> - double value;
|> + double double_value;
|> };
|
|e$B$3$l$O!“%a%s%P$KD>@?($l$k%3!<%I$r%3%s%Q%$%k;~$K%(%i!<$K$9$k$3$H$Ge(B
|e$B!V%^%/%m$r;H$o$6$k$rF@$J$$!W>u67$r:n$j=P$9=P$9L\E*$G$O$J$$$+!”$He(B
|e$B<Y?d$7$^$7$?!#e(B

e$B8D?ME*$K$O%3%s%Q%$%k%(%i!<$rH/@8$5$;$F%^%/%m$X$NJQ49$,I,MW$Je(B
e$B>l=j$r8!=P$9$k$?$a$G$O$J$$$+$H;W$$$^$7$?!#$N$G!“e(B(e$B;d$Oe(B)e$B$o$6$oe(B
e$B$6JQ99$9$kI,MW$,$”$k$H$O;W$C$F$$$^$;$s!#e(B

e$B!!$5$5$@$G$9!%e(B

Urabe S. wrote:

e$B$3$N$/$i$$J#;($K$J$k$s$G$9$1$I$b!#K\Ev$KB.$$$s$G$9$+$3$l!#e(B

e$B!!$"$kDxEYJ#;($K$J$k$H$O;W$&$s$@$1$I!$e(Ballocation e$B$de(B GC
e$B$N%3%9%H$r9Me(B
e$B$($k$H==J,$K%Z%$$9$k$s$8$c$J$$$+$J!<!$$H;W$C$F$$$^$9!%<B:]$d$C$F$$Fe(B
e$B$O$+$C$F$
$J$$$H$o$+$i$J$$$1$l$I!%e(B

e$B:XF#$H?=$7$^$9!#e(B

e$B<+J,$b<B$O;w$?$h$&$J$3$H$r9M$($F$$$?$N$G$9$,!"e(B

On Wed, 14 Nov 2007 01:26:28 +0900
Urabe S. [email protected] wrote:

    (e$B$J$s$+Kd$a9~$`<0e(B) \
  )                    \
) :                    \
rb_float_new(v)        \

)

e$B$3$N$/$i$$J#;($K$J$k$s$G$9$1$I$b!#K\Ev$KB.$$$s$G$9$+$3$l!#e(B

IEEE754e$B7h$aBG$A$G$J$i!“$$$/$D$+$N%S%C%HA`:n$N$_$K$G$-$k$N$G$O$J$$$G$7$ge(B
e$B$&$+!#$h$C$F==J,B.$/$J$k$N$G$O!”$HLQA[$7$F$$$^$7$?!#e(B

e$B$5$5$@$5$s$N!Ve(Bexp

e$B$,!W$H$$$&8@MU$b!"$=$l$rA[Dj$7$F2>?tIt$K%?!<%2%C%H$re(B

e$B$7$$C$F$$$k$H$$$&0U?^$@$HFI$_$^$7$?!#$,!"$5$F!#e(B