did not handle -0.0 right
This commit is contained in:
parent
650c178631
commit
04dcaf5685
5 changed files with 25 additions and 7 deletions
|
@ -30,8 +30,11 @@ _float f1,f2;
|
||||||
|
|
||||||
sign1 = SIGN(l1);
|
sign1 = SIGN(l1);
|
||||||
sign2 = SIGN(l2);
|
sign2 = SIGN(l2);
|
||||||
if (sign1 != sign2)
|
if (sign1 != sign2) {
|
||||||
|
if ((l1 & 0x7fffffff) == 0 &&
|
||||||
|
(l2 & 0x7fffffff) == 0) return 0;
|
||||||
return ((sign1 > 0) ? -1 : 1);
|
return ((sign1 > 0) ? -1 : 1);
|
||||||
|
}
|
||||||
|
|
||||||
return (sign1 * ((l1 < l2) ? 1 : -1));
|
return (sign1 * ((l1 < l2) ? 1 : -1));
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,11 @@ _double d1,d2;
|
||||||
sign1 = SIGN(l1);
|
sign1 = SIGN(l1);
|
||||||
sign2 = SIGN(l2);
|
sign2 = SIGN(l2);
|
||||||
if (sign1 != sign2) {
|
if (sign1 != sign2) {
|
||||||
return ((sign1 > 0) ? -1 : 1);
|
l1 &= 0x7fffffff;
|
||||||
|
l2 &= 0x7fffffff;
|
||||||
|
if (l1 != 0 || l2 != 0) {
|
||||||
|
return ((sign1 > 0) ? -1 : 1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (l1 != l2) { /* we can decide here */
|
if (l1 != l2) { /* we can decide here */
|
||||||
rv = l1 < l2 ? 1 : -1;
|
rv = l1 < l2 ? 1 : -1;
|
||||||
|
|
|
@ -42,7 +42,8 @@ int size;
|
||||||
int leadbit = 0;
|
int leadbit = 0;
|
||||||
|
|
||||||
cpt1 = (char *) from;
|
cpt1 = (char *) from;
|
||||||
if (((DOUBLE *) cpt1)->_s.p1.fract == 0L) {
|
if (((DOUBLE *) cpt1)->_s.p1.fract == 0L ||
|
||||||
|
((DOUBLE *) cpt1)->_s.p1.fract == 0x80000000) {
|
||||||
if (size == sizeof(SINGLE)) {
|
if (size == sizeof(SINGLE)) {
|
||||||
zero: zrf_ext(to);
|
zero: zrf_ext(to);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -26,7 +26,12 @@ struct fef4_returns *r;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extend((_double *) &s1,&buf,sizeof(_float));
|
extend((_double *) &s1,&buf,sizeof(_float));
|
||||||
p->e = buf.exp+1;
|
if (buf.exp == 0 && buf.m1 == 0 && buf.m2 == 0) {
|
||||||
buf.exp = -1;
|
p->e = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p->e = buf.exp+1;
|
||||||
|
buf.exp = -1;
|
||||||
|
}
|
||||||
compact(&buf,(_double *) &p->f,sizeof(_float));
|
compact(&buf,(_double *) &p->f,sizeof(_float));
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,12 @@ struct fef8_returns *r;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
extend(&s1,&buf,sizeof(_double));
|
extend(&s1,&buf,sizeof(_double));
|
||||||
p->e = buf.exp + 1;
|
if (buf.exp == 0 && buf.m1 == 0 && buf.m2 == 0) {
|
||||||
buf.exp = -1;
|
p->e = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
p->e = buf.exp + 1;
|
||||||
|
buf.exp = -1;
|
||||||
|
}
|
||||||
compact(&buf,&p->f,sizeof(_double));
|
compact(&buf,&p->f,sizeof(_double));
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue