tweak treatment of IEEE scaling
This commit is contained in:
parent
148dca926a
commit
6130ad3144
2 changed files with 8 additions and 7 deletions
|
@ -109,7 +109,7 @@ static inline int Y(rescale) (Tb * restrict lam1, Tb * restrict lam2,
|
|||
int did_scale=0;
|
||||
for (int i=0;i<nvec; ++i)
|
||||
{
|
||||
Tv mask = vgt(vabs(lam2->v[i]),vone);
|
||||
Tv mask = vgt(vabs(lam2->v[i]),vload(sharp_ftol));
|
||||
if (vanyTrue(mask))
|
||||
{
|
||||
did_scale=1;
|
||||
|
@ -126,20 +126,20 @@ static inline void Y(normalize) (Tb * restrict val, Tb * restrict scale)
|
|||
const Tv vfsmall=vload(sharp_fsmall), vfbig=vload(sharp_fbig);
|
||||
for (int i=0;i<nvec; ++i)
|
||||
{
|
||||
Tv mask = vgt(vabs(val->v[i]),vone);
|
||||
Tv mask = vgt(vabs(val->v[i]),vload(sharp_ftol));
|
||||
while (vanyTrue(mask))
|
||||
{
|
||||
vmuleq(val->v[i],vblend(mask,vfsmall,vone));
|
||||
vaddeq(scale->v[i],vblend(mask,vone,vzero));
|
||||
mask = vgt(vabs(val->v[i]),vone);
|
||||
mask = vgt(vabs(val->v[i]),vload(sharp_ftol));
|
||||
}
|
||||
mask = vlt(vabs(val->v[i]),vfsmall);
|
||||
mask = vlt(vabs(val->v[i]),vload(sharp_fsmall*sharp_ftol));
|
||||
mask = vand(mask,vne(val->v[i],vzero));
|
||||
while (vanyTrue(mask))
|
||||
{
|
||||
vmuleq(val->v[i],vblend(mask,vfbig,vone));
|
||||
vsubeq(scale->v[i],vblend(mask,vone,vzero));
|
||||
mask = vlt(vabs(val->v[i]),vfsmall);
|
||||
mask = vlt(vabs(val->v[i]),vload(sharp_fsmall*sharp_ftol));
|
||||
mask = vand(mask,vne(val->v[i],vzero));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -36,8 +36,9 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
enum { sharp_minscale=-10, sharp_limscale=0, sharp_maxscale=2 };
|
||||
static const double sharp_fbig=0x1p+90,sharp_fsmall=0x1p-90;
|
||||
enum { sharp_minscale=-1, sharp_limscale=1, sharp_maxscale=1 };
|
||||
static const double sharp_fbig=0x1p+450,sharp_fsmall=0x1p-450;
|
||||
static const double sharp_ftol=0x1p-60;
|
||||
|
||||
typedef struct { double f[2]; } sharp_ylmgen_dbl2;
|
||||
typedef struct { double f[3]; } sharp_ylmgen_dbl3;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue