Re: Re: endless loop in remainder() on mips

From: Zhang Fuxin <hidden>
Date: 2002-02-19 12:24:44

在 2002-02-19 11:46:00 you wrote:
....
quoted
It is weird enough for me that u doesn't equal to tmp2,that is where x86 and mips differ. 

the output from my P4:
rounding is TONEAREST
x=(7fefffff,ffffffff),y=(00000000,00000001)
x=(7fefffff,ffffffff),y=(04d00000,00000000)
1/y=7b100000,00000000
n=04d00000,nn=06100000,ww=(00000000,00000000),w=(04d00000,00000000),l=79d00000
u=(7fefffff,ffffffff),d=(41400000,00000000),w=(7ea00000,00000000)
d*w=(7ff00000,00000000),u.x-d*w=(fff00000,00000000),u=(fca00000,00000000) <--notice this
u=(fca00000,00000000),d=(c1300000,00000000),w=(7b600000,00000000)
d*w=(fca00000,00000000),u.x-d*w=(00000000,00000000),u=(00000000,00000000)
x=(00000000,00000000),y=(04d00000,00000000)

output from mipsel:
rounding is TONEAREST
x=(7fefffff,ffffffff),y=(00000000,00000001)
x=(7fefffff,ffffffff),y=(04d00000,00000000)
1/y=7b100000,00000000
n=04d00000,nn=06100000,ww=(00000000,00000000),w=(04d00000,00000000),l=79d00000
u=(7fefffff,ffffffff),d=(41400000,00000000),w=(7ea00000,00000000)
d*w=(7ff00000,00000000),u.x-d*w=(fff00000,00000000),u=(fff00000,00000000) <--notice this
u=(fff00000,00000000),d=(fff00000,00000000),w=(7eb00000,00000000)
d*w=(fff00000,00000000),u.x-d*w=(7ff7ffff,ffffffff),u=(7ff7ffff,ffffffff)
u=(7ff7ffff,ffffffff),d=(7ff7ffff,ffffffff),w=(7eb00000,00000000)
d*w=(7ff7ffff,ffffffff),u.x-d*w=(7ff7ffff,ffffffff),u=(7ff7ffff,ffffffff)
u=(7ff7ffff,ffffffff),d=(7ff7ffff,ffffffff),w=(7eb00000,00000000)
d*w=(7ff7ffff,ffffffff),u.x-d*w=(7ff7ffff,ffffffff),u=(7ff7ffff,ffffffff)
u=(7ff7ffff,ffffffff),d=(7ff7ffff,ffffffff),w=(7eb00000,00000000)
d*w=(7ff7ffff,ffffffff),u.x-d*w=(7ff7ffff,ffffffff),u=(7ff7ffff,ffffffff)
You're right. Not a bug. Internally your P4 uses more than 64 bits in its
Then libm needs a fix.       I see,Thank you.
calculations. Here's my test and output from my AMD, Sun and MIPS:

typedef union number_s {
   long long ll;
   double d;
} t_number;

#define P(x) printf(#x "=%e %016llx\n", x.d, x.ll)

int main()
{
   t_number u, d, w, t, r;

   u.ll = 0x7fefffffffffffff;
   d.ll = 0x4140000000000000;
   w.ll = 0x7ea0000000000000;
   t.d = d.d * w.d;
   t.d = u.d - t.d;
   r.d = (u.d - d.d * w.d);
   P(u);
   P(d);
   P(w);
   P(r);
   P(t);
}

AMD:
u=1.797693e+308 7fefffffffffffff
d=2.097152e+06 4140000000000000
w=8.572069e+301 7ea0000000000000
r=-1.995840e+292 fca0000000000000
t=-inf fff0000000000000

Sun:
u=1.797693e+308 7fefffffffffffff
d=2.097152e+06 4140000000000000
w=8.572069e+301 7ea0000000000000
r=-Inf fff0000000000000
t=-Inf fff0000000000000

MIPS:
u=1.797693e+308 7fefffffffffffff
d=2.097152e+06 4140000000000000
w=8.572069e+301 7ea0000000000000
r=-inf fff0000000000000
t=-inf fff0000000000000


/Kjeld

-- 
_    _ ____  ___                       Mailto:kjelde@mips.com
|\  /|||___)(___    MIPS Denmark       Direct: +45 44 86 55 85
| \/ |||    ____)   Lautrupvang 4 B    Switch: +45 44 86 55 55
 TECHNOLOGIES      DK-2750 Ballerup   Fax...: +45 44 86 55 56
                   Denmark            http://www.mips.com/
Regards
            Zhang Fuxin
            fxzhang@ict.ac.cn
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help