# Dtoa() / freedtoa() $B$N2~B$(B

**URL:** <https://www.ruby-forum.com/t/dtoa-freedtoa-b-n2-b-b/151715>\
**Category:** Development\
**Created:** [October 24, 2008, 7:33pm UTC](https://www.ruby-forum.com/t/dtoa-freedtoa-b-n2-b-b/151715 "2008-10-24T19:33:48Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![sugie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@sugie](https://www.ruby-forum.com/u/sugie)\
**Post date:** [October 24, 2008, 7:33pm UTC](https://www.ruby-forum.com/t/dtoa-freedtoa-b-n2-b-b/151715/1 "2008-10-24T19:33:48Z")

</div>

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

[ruby-dev:32792]e$B$N!“e(BC API e$BL\>A06u4V$N$\*OC$NB3$-$G$9!#e(B  
10e$B%v7nA0$NOC$G!”$7$+$be(BABIe$B%U%j!\<%:$^$Ge(B24e$B;~4V$J$/$F!"$9$\_$^$;$s!#e(B  
e$B\<h$j$3$a$kHO0O$@$1$G7k9=$G$9!#e(B

util.ce$B$Ne(Bfreedtoa()e$B$O!"L\>A0$+$i;!$9$k$KF1%U%!%$%k$Ne(Bdtoa()e$B$NFbIt$@$1$G;H$o$l$k;v$re(B  
e$B0U?^$7$F$$$k$N$G$O$J$$$G$7$g$&$+!#e(Bstatice$B$K$7$F$[$7$$$G$9!#e(B

e$B$^$?e(Bdtoa()e$B$b!“30It$K=P$9I,MW$,$”$k$J$i$Pe(Bprefixe$B$rIU$1$F$[$7$$$G$9!#e(Butil.ce$B$NB\>$Ne(B  
e$B4X?t$r8+$k$J$i$P!"e(Bruby\_e$B$G$7$g$&$+!#e(B

e$B!D$H$$$&$H$3$m$^$G$,KvHx$N%Q%C%A$NHO0O$J$N$G$9$,!“5?Ld$K;D$kE@$,$”$j$^$9!#e(B

dtoa()e$B$,;H$o$l$k$N$O$I$&$be(Bmissing/vsnprintf.ce$B$NCf!"$D$^$je(Bvsnprintf()  
(e$B$He(Bsnprintf()) e$B$,;H$($J$$4D6-$N$_$N$h$&$G$9!#e(B  
e$B$7$+$7e(Bvsnprintf()e$B$,B8:_$9$k$h$&$J\<+J,$N4D6-$G$b!";H$o$l$J$$e(Bdtoa()e$B$,Dj5A$5$l$Fe(B  
e$B$$$^$9!#$3$l$OK\Mh!"I,MW$J$$;v$G$O$J$$$G$7$g$&$+!#e(B

e$B;W$&$K!“e(Bsprintf.ce$B$Ge(BHAVE\_\*e$B$r%A%’%C%/$;$:$Ke(B  
#include “missing/vsnprintf.c”  
e$B$7$F$$$k$N$,LdBj$@$H;W$&$N$G$9$,!”$3$l$K$O$I$s$JM}M3$,$"$k$N$G$7$g$&$+!#e(B  
e$B\<+J,$K$O$A$g$C$HJ,$+$j$^$;$s$G$7$?!#e(B

e$B$H$j$"$($:e(B

- freedtoa()e$B$re(B statice$B$Ke(B
- dtoa()e$B$re(B ruby\_dtoa()e$B$Ke(B  
e$B$9$k%Q%C%A$,0J2\<$G$9!#8!F$$$$?$@$1$k$H$"$j$,$?$/;W$$$^$9!#e(B

# Index: sprintf.c

— sprintf.c (revision 19921)  
+++ sprintf.c (working copy)  
@@ -1083,7 +1083,7 @@  
#undef vsnprintf  
#undef snprintf  
#define FLOATING\_POINT 1  
-#define BSD\_\_dtoa dtoa  
+#define BSD\_\_dtoa ruby\_dtoa  
#include “missing/vsnprintf.c”

# static int Index: util.c

— util.c (revision 19921)  
+++ util.c (working copy)  
@@ -3092,7 +3092,7 @@

- when MULTIPLE\_THREADS is not defined.  
\*/

-void  
+static void  
freedtoa(char \*s)  
{  
Bigint \*b = (Bigint \*)((int \*)s - 1);  
@@ -3139,7 +3139,7 @@  
\*/

char \*  
-dtoa(double d, int mode, int ndigits, int \*decpt, int \*sign, char  
\*\*rve)  
+ruby\_dtoa(double d, int mode, int ndigits, int \*decpt, int \*sign, char  
\*_rve)  
{  
/_ Arguments ndigits, decpt, sign are similar to those  
of ecvt and fcvt; trailing zeros are suppressed from

---

<div class="post-metadata">

**Author:** ![sugie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@sugie](https://www.ruby-forum.com/u/sugie)\
**Post date:** [October 24, 2008, 9:03pm UTC](https://www.ruby-forum.com/t/dtoa-freedtoa-b-n2-b-b/151715/2 "2008-10-24T21:03:36Z")

</div>

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

At Sat, 25 Oct 2008 02:31:20 +0900,  
Tadashi S. wrote in [ruby-dev:36913]:

> dtoa()e$B$,;H$o$l$k$N$O$I$&$be(Bmissing/vsnprintf.ce$B$NCf!"$D$^$je(Bvsnprintf()  
> (e$B$He(Bsnprintf()) e$B$,;H$($J$$4D6-$N$_$N$h$&$G$9!#e(B  
> e$B$7$+$7e(Bvsnprintf()e$B$,B8:_$9$k$h$&$J\<+J,$N4D6-$G$b!";H$o$l$J$$e(Bdtoa()e$B$,Dj5A$5$l$Fe(B  
> e$B$$$^$9!#$3$l$OK\Mh!"I,MW$J$$;v$G$O$J$$$G$7$g$&$+!#e(B
> 
> e$B;W$&$K!“e(Bsprintf.ce$B$Ge(BHAVE\_\*e$B$r%A%’%C%/$;$:$Ke(B  
> #include “missing/vsnprintf.c”  
> e$B$7$F$$$k$N$,LdBj$@$H;W$&$N$G$9$,!”$3$l$K$O$I$s$JM}M3$,$"$k$N$G$7$g$&$+!#e(B  
> e$B\<+J,$K$O$A$g$C$HJ,$+$j$^$;$s$G$7$?!#e(B

e$B%7%9%F%`I8=`$Ne(Bvsnprintf()e$B$Oe(Blocalee$B$K0MB8$7$F$$$k\>l9g$,$"$j$^$9!#e(B  
1.9e$B$G$O$=$l$rHr$1$k$?$a$K\>o$Ke(Bmissing/vsnprintf.ce$B$r;H$$$^$9!#e(B

> e$B$H$j$"$($:e(B
> 
> - freedtoa()e$B$re(B statice$B$Ke(B
> - dtoa()e$B$re(B ruby\_dtoa()e$B$Ke(B  
> e$B$9$k%Q%C%A$,0J2\<$G$9!#8!F$$$$?$@$1$k$H$"$j$,$?$/;W$$$^$9!#e(B

[ruby-dev:36915]e$B!"e(B[ruby-dev:36916]e$B$H$H$b$K%3%\_%C%H$7$^$7$?!#e(B

---

<div class="post-metadata">

**Author:** ![sugie](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/82dd89/32.png) [@sugie](https://www.ruby-forum.com/u/sugie)\
**Post date:** [October 29, 2008, 4:23pm UTC](https://www.ruby-forum.com/t/dtoa-freedtoa-b-n2-b-b/151715/3 "2008-10-29T16:23:56Z")

</div>

e$B:XF#$G$9!#e(B

On Sat, 25 Oct 2008 04:02:52 +0900  
Nobuyoshi N. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> e$B%7%9%F%`I8=`$Ne(Bvsnprintf()e$B$Oe(Blocalee$B$K0MB8$7$F$$$k\>l9g$,$"$j$^$9!#e(B  
> 1.9e$B$G$O$=$l$rHr$1$k$?$a$K\>o$Ke(Bmissing/vsnprintf.ce$B$r;H$$$^$9!#e(B

e$B$“$l!”\<j85$N4D6-e(B(Debian  
lenny)e$B$G$O!"%7%9%F%`$Ne(Bvsnprintf()e$B$r;H$C$F$$$^$9$h!#e(B

$ nm libruby-trunk.so|grep vsnprintf  
U vsnprintf@@GLIBC\_2.0

e$B$H$J$j$^$9$7!"e(Bmissing/vsnprintf.ce$B$N%3!\<%I$be(B

#ifndef HAVE\_VSNPRINTF  
int  
vsnprintf(str, n, fmt, ap)  
:

e$B$H$"$j$^$9!#$3$l$G$O!"e(Blocalee$B0MB8@-$K4X$o$i$:%7%9%F%`$NJ}$r;H$&$h$&$K8+$($k$Ne(B  
e$B$G$9$,!"30$7$F$$$?$i$9$\_$^$;$s!#e(B

> > e$B$H$j$"$($:e(B
> > 
> > - freedtoa()e$B$re(B statice$B$Ke(B
> > - dtoa()e$B$re(B ruby\_dtoa()e$B$Ke(B  
> > e$B$9$k%Q%C%A$,0J2\<$G$9!#8!F$$$$?$@$1$k$H$"$j$,$?$/;W$$$^$9!#e(B
> 
> [ruby-dev:36915]e$B!"e(B[ruby-dev:36916]e$B$H$H$b$K%3%\_%C%H$7$^$7$?!#e(B

e$B$3$A$i$O!“$”$j$,$H$&$4$6$$$^$7$?!#e(B
