implemented optional shift in bitvector mantissa
This commit is contained in:
parent
bcec9491f7
commit
9c63880efb
10
bitvector.h
10
bitvector.h
@ -95,8 +95,10 @@ for(int i=0; i<n; ++i) if(v[i]) r[i]=1;
|
|||||||
|
|
||||||
//mantissa of a floating number between 0 and 1
|
//mantissa of a floating number between 0 and 1
|
||||||
template <typename T>
|
template <typename T>
|
||||||
bitvector mantissa(const T &x, int nbits)
|
bitvector mantissa(T x, int nbits, int shift=0)
|
||||||
{
|
{
|
||||||
|
while(shift >0) {x+=x; --shift;}
|
||||||
|
while(shift <0) {x*=.5; ++shift;}
|
||||||
if(x<0||x>=1) laerror("number not normalized in bitvector mantissa");
|
if(x<0||x>=1) laerror("number not normalized in bitvector mantissa");
|
||||||
bitvector b(nbits);
|
bitvector b(nbits);
|
||||||
b.clear();
|
b.clear();
|
||||||
@ -111,10 +113,12 @@ return b;
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void bitvector_decimal(T &x, const bitvector &b)
|
void bitvector_decimal(T &x, const bitvector &b, int shift=0)
|
||||||
{
|
{
|
||||||
x=0;
|
x=0;
|
||||||
for(int i=0; i<b.size(); ++i) if(b[i]) x += 1./(1ULL<<i);
|
for(int i=b.size()-1; i>=0; --i) if(b[i]) x += 1./(1ULL<<i);
|
||||||
|
while(shift >0) {x+=x; --shift;}
|
||||||
|
while(shift <0) {x*=.5; ++shift;}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user