1
0
mirror of https://github.com/golang/go synced 2024-11-25 22:07:58 -07:00

change floating literal normalization

from word-oriented to bit-oriented.
this will increase fp literal precision
by up to a full word.

R=rsc
CC=golang-dev
https://golang.org/cl/1859044
This commit is contained in:
Ken Thompson 2010-07-19 16:10:46 -07:00
parent a5fe54aa2b
commit f6b93ab432

View File

@ -27,16 +27,36 @@ sigfig(Mpflt *a)
void
mpnorm(Mpflt *a)
{
int s;
int s, os;
long x;
s = sigfig(a);
if(s == 0) {
os = sigfig(a);
if(os == 0) {
// zero
a->exp = 0;
a->val.neg = 0;
return;
}
s = (Mpnorm-s) * Mpscale;
// this will normalize to the nearest word
x = a->val.a[os-1];
s = (Mpnorm-os) * Mpscale;
// further normalize to the nearest bit
for(;;) {
x <<= 1;
if(x & Mpbase)
break;
s++;
if(x == 0) {
// this error comes from trying to
// convert an Inf or something
// where the initial x=0x80000000
s = (Mpnorm-os) * Mpscale;
break;
}
}
mpshiftfix(&a->val, s);
a->exp -= s;
}