Esempio n. 1
0
inline BigFloat SafeMin( const BigFloat& alpha )
{
    // TODO: Decide how to only recompute this when the precision changes
    const BigFloat one = BigFloat(1,alpha.Precision());
    const BigFloat eps = Epsilon(alpha);
    const BigFloat minVal = Min(alpha);
    const BigFloat invMax = one/Max(alpha);
    return ( invMax>minVal ? invMax*(one+eps) : minVal );
}
Esempio n. 2
0
inline BigFloat Epsilon<BigFloat>( const BigFloat& alpha )
{
    // NOTE: This 'precision' is the number of bits in the mantissa
    auto p = alpha.Precision();

    // epsilon = b^{-(p-1)} / 2 = 2^{-p}
    BigFloat one(1,p);
    return one >> p;
}
Esempio n. 3
0
inline Int NumMantissaBits<BigFloat>( const BigFloat& alpha )
{ return alpha.Precision(); }
Esempio n. 4
0
inline BigFloat Infinity<BigFloat>( const BigFloat& alpha )
{
    BigFloat inf(0,alpha.Precision());
    mpfr_set_inf( inf.Pointer(), 1 );
    return inf;
}
Esempio n. 5
0
inline BigFloat Min<BigFloat>( const BigFloat& alpha )
{
    BigFloat one(1,alpha.Precision());
    return one << (MinExponent<BigFloat>()-1);
}
Esempio n. 6
0
inline BigFloat Max<BigFloat>( const BigFloat& alpha )
{
    BigFloat one(1,alpha.Precision());
    return (one-Epsilon(one)) << MaxExponent<BigFloat>();
}