9 |
|
|
10 |
|
#include "rtmath.h" |
11 |
|
|
12 |
< |
#define DCSCALE 11585.2 /* (1<<13)*sqrt(2) */ |
12 |
> |
#define DCSCALE 11584.7 /* (1<<13)*sqrt(2) - .5 */ |
13 |
|
#define FXNEG 01 |
14 |
|
#define FYNEG 02 |
15 |
|
#define FZNEG 04 |
28 |
|
|
29 |
|
for (i = 0; i < 3; i++) |
30 |
|
if (dv[i] < 0.) { |
31 |
< |
cd[i] = (int)(dv[i] * -DCSCALE); |
31 |
> |
cd[i] = (int)(dv[i] * -DCSCALE + .5); |
32 |
|
dc |= FXNEG<<i; |
33 |
|
} else |
34 |
< |
cd[i] = (int)(dv[i] * DCSCALE); |
34 |
> |
cd[i] = (int)(dv[i] * DCSCALE + .5); |
35 |
|
if (!(cd[0] | cd[1] | cd[2])) |
36 |
|
return(0); /* zero normal */ |
37 |
|
if (cd[0] <= cd[1]) { |
61 |
|
dv[0] = dv[1] = dv[2] = 0.; |
62 |
|
return; |
63 |
|
} |
64 |
< |
d1 = ((dc>>F1SFT & FMASK)+.5)*(1./DCSCALE); |
65 |
< |
d2 = ((dc>>F2SFT & FMASK)+.5)*(1./DCSCALE); |
64 |
> |
d1 = (dc>>F1SFT & FMASK)*(1./DCSCALE); |
65 |
> |
d2 = (dc>>F2SFT & FMASK)*(1./DCSCALE); |
66 |
|
der = sqrt(1. - d1*d1 - d2*d2); |
67 |
|
if (dc & F1X) { |
68 |
|
dv[0] = d1; |
94 |
|
dv[0] = dv[1] = dv[2] = 0.; |
95 |
|
return; |
96 |
|
} |
97 |
< |
d1 = ((dc>>F1SFT & FMASK)+.5)*(1./DCSCALE); |
98 |
< |
d2 = ((dc>>F2SFT & FMASK)+.5)*(1./DCSCALE); |
97 |
> |
d1 = (dc>>F1SFT & FMASK)*(1./DCSCALE); |
98 |
> |
d2 = (dc>>F2SFT & FMASK)*(1./DCSCALE); |
99 |
|
der = sqrt(1. - d1*d1 - d2*d2); |
100 |
|
dv[itab[ndx][0]] = d1; |
101 |
|
dv[itab[ndx][1]] = d2; |