# 0\*\*2 causes division by zero

**URL:** <https://www.ruby-forum.com/t/0-2-causes-division-by-zero/107579>\
**Category:** Development\
**Created:** [June 23, 2007, 4:58pm UTC](https://www.ruby-forum.com/t/0-2-causes-division-by-zero/107579 "2007-06-23T16:58:09Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [June 23, 2007, 4:58pm UTC](https://www.ruby-forum.com/t/0-2-causes-division-by-zero/107579/1 "2007-06-23T16:58:09Z")

</div>

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

ruby 1.9 e$B$Ge(B 0\*\*2 e$B$rI\>2A$9$k$He(B SIGFPE e$B$GMn$A$^$9!#e(B

$ ./ruby -e ‘0\*\*2’  
e$BIbF0\>.?tE@1i;;Nc30$G$9e(B

e$B$3$s$J46$8$G$7$g$&$+!#$D$$$G$KM\>7W$J:GE,2=$bF~$l$F$\_$^$7$?$,!"e(B  
e$BM\>7W$G$7$?$i$O$:$7$F$/$@$5$$!#e(B

# Index: numeric.c

— numeric.c (revision 12589)  
+++ numeric.c (working copy)  
@@ -2280,6 +2280,9 @@  
int neg = x \< 0;  
long z = 1;

- if (x == 0) return INT2FIX(0);
- if (y == 0) return INT2FIX(1);
- if (y == 1) return LONG2NUM(x);  
if (neg) x = -x;  
if (y & 1) z = x;  
y &= ~1;

# e$B$=$&$$$($Pe(B 0\*\*0 e$B$Oe(B 1 e$B$G$$$$$s$G$7$g$&$+!#e(B

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [June 24, 2007, 8:00am UTC](https://www.ruby-forum.com/t/0-2-causes-division-by-zero/107579/2 "2007-06-24T08:00:28Z")

</div>

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

At Sat, 23 Jun 2007 23:57:11 +0900,  
Yusuke ENDOH wrote in [ruby-dev:31040]:

> ruby 1.9 e$B$Ge(B 0\*\*2 e$B$rI\>2A$9$k$He(B SIGFPE e$B$GMn$A$^$9!#e(B

e$B$9$$$^$;$s!#%A%’%C%/$r8e2s$7$K$7$FK:$l$F$^$7$?!#e(B

> e$B$3$s$J46$8$G$7$g$&$+!#$D$$$G$KM\>7W$J:GE,2=$bF~$l$F$\_$^$7$?$,!"e(B  
> e$BM\>7W$G$7$?$i$O$:$7$F$/$@$5$$!#e(B

ye$B$N%A%’%C%/$Oe(Bfix\_pow()e$B$G$d$C$F$^$9$+$i!"ITMW$@$H;W$$$^$9!#e(Bxe$B$b$=$Ce(B  
e$B$A$G$7$?$[$&$,$$$$$+$b!#e(B

e$B$D$$$G$Ke(Bint\_round()e$B$r8+$F$$$?$N$G$9$,!"e(Bndigits==LONG\_MINe$B$N$H$-e(B  
e$B$K;~4V$,$+$+$j$9$.$FJV$C$F$3$J$/$J$j$^$9$M!#%(%i!\<$K$9$k$+e(B0e$B$rJVe(B  
e$B$9$h$&$K$7$?$[$&$,$h$5$=$&$G$9!#e(B

> # e$B$=$&$$$($Pe(B 0\*\*0 e$B$Oe(B 1 e$B$G$$$$$s$G$7$g$&$+!#e(B

e$B$^$!$$$$$s$8$c$J$$$G$7$g$&$+!#e(B

# Index: numeric.c

— numeric.c (revision 12591)  
+++ numeric.c (working copy)  
@@ -2331,4 +2331,5 @@ fix\_pow(VALUE x, VALUE y)  
if (b == 1) return x;  
a = FIX2LONG(x);

- if (a == 0) return INT2FIX(0);  
if (b \> 0) {  
return int\_pow(a, b);  
@@ -2902,7 +2903,5 @@ int\_round(int argc, VALUE\* argv, VALUE n  
int ndigits;

- if (argc == 0) return num;
- if (FIXNUM\_P(num)) return num\_round(argc, argv, num);
- 

- if (argc == 0) return 0;  
rb\_scan\_args(argc, argv, “1”, &n);  
ndigits = NUM2INT(n);  
@@ -2910,6 +2909,20 @@ int\_round(int argc, VALUE\* argv, VALUE n  
return rb\_Float(num);  
}
- if (ndigits == 0) {
- return num;
- }  
ndigits = -ndigits;
- if (ndigits \< 0) {
- rb\_raise(rb\_eArgError, “ndigits out of range”);
- }  
f = int\_pow(10, ndigits);
- if (FIXNUM\_P(num) && FIXNUM\_P(f)) {
- SIGNED\_VALUE x = FIX2LONG(num), y = FIX2LONG(f);
- int neg = x \< 0;
- if (neg) x = -x;
- x = (x + y / 2) / y \* y;
- if (neg) x = -x;
- return LONG2NUM(x);
- }  
h = rb\_funcall(f, ‘/’, 1, INT2FIX(2));  
r = rb\_funcall(num, ‘%’, 1, f);

---

<div class="post-metadata">

**Author:** ![Yusuke\_ENDOH](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/y/c89c15/32.png) [@Yusuke\_ENDOH](https://www.ruby-forum.com/u/Yusuke_ENDOH)\
**Post date:** [June 24, 2007, 4:52pm UTC](https://www.ruby-forum.com/t/0-2-causes-division-by-zero/107579/3 "2007-06-24T16:52:14Z")

</div>

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

In message “Re: [ruby-dev:31043] Re: 0\*\*2 causes division by zero”  
on Sun, 24 Jun 2007 14:59:25 +0900, Nobuyoshi N.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) writes:

|At Sat, 23 Jun 2007 23:57:11 +0900,  
|Yusuke ENDOH wrote in [ruby-dev:31040]:  
|\> ruby 1.9 e$B$Ge(B 0**2 e$B$rI\>2A$9$k$He(B SIGFPE e$B$GMn$A$^$9!#e(B  
|  
|e$B$9$$$^$;$s!#%A%‘%C%/$r8e2s$7$K$7$FK:$l$F$^$7$?!#e(B  
|  
|\> e$B$3$s$J46$8$G$7$g$&$+!#$D$$$G$KM\>7W$J:GE,2=$bF~$l$F$\_$^$7$?$,!"e(B  
|\> e$BM\>7W$G$7$?$i$O$:$7$F$/$@$5$$!#e(B  
|  
|ye$B$N%A%’%C%/$Oe(Bfix\_pow()e$B$G$d$C$F$^$9$+$i!"ITMW$@$H;W$$$^$9!#e(Bxe$B$b$=$Ce(B  
|e$B$A$G$7$?$[$&$,$$$$$+$b!#e(B  
|  
|e$B$D$$$G$Ke(Bint\_round()e$B$r8+$F$$$?$N$G$9$,!"e(Bndigits==LONG\_MINe$B$N$H$-e(B  
|e$B$K;~4V$,$+$+$j$9$.$FJV$C$F$3$J$/$J$j$^$9$M!#%(%i!\<$K$9$k$+e(B0e$B$rJVe(B  
|e$B$9$h$&$K$7$?$[$&$,$h$5$=$&$G$9!#e(B  
|  
|\> # e$B$=$&$$$($Pe(B 0**0 e$B$Oe(B 1 e$B$G$$$$$s$G$7$g$&$+!#e(B  
|  
|e$B$^$!$$$$$s$8$c$J$$$G$7$g$&$+!#e(B

e$B$&$`!"E0Dl$7$F$^$9$M!#$3$C$A$NJ}$,$h$5$=$&$G$9$+$i%3%\_%C%H$7e(B  
e$B$F$/$@$5$$!#e(B
