Statistiques
| Révision :

root / pobysoPythonSage / src / sageSLZ / sageNumericalOperations.sage

Historique | Voir | Annoter | Télécharger (1,03 ko)

1 246 storres
sys.stderr.write("sageNumericalOperations: loading...\n")
2 246 storres
#
3 172 storres
def sno_abs_is_power_of_two(number):
4 172 storres
    """
5 172 storres
    Check if the absolute value of a number is power of 2.
6 268 storres
    As of Sage 7.1, the built-in is_power_of_two, only works with integer and
7 172 storres
    returns false for negative ones.
8 172 storres
    """
9 268 storres
    #return is_power_of_two(abs(number))
10 268 storres
    log2number = log(abs(number))/log(2)
11 268 storres
    return log2number.n() == long(log2number.n())
12 172 storres
# End sno_abs_is_power_of_two(number):
13 246 storres
#
14 179 storres
def sno_float_to_rat_pow_of_two_denom(number):
15 179 storres
    """
16 179 storres
    Convert a floating-point number into a rational where the denominator
17 179 storres
    is a power of two
18 179 storres
    """
19 179 storres
    ## Argument checking.
20 179 storres
    if not number.is_real():
21 179 storres
        return None
22 179 storres
    #
23 179 storres
    (sign, mantissa, exponent) = number.sign_mantissa_exponent()
24 179 storres
    #print sign, mantissa, exponent
25 179 storres
    precision = number.prec()
26 179 storres
    if sign == 1:
27 187 storres
        return mantissa / 2^(-exponent)
28 179 storres
    else:
29 187 storres
        return -mantissa / 2^(-exponent)
30 246 storres
# End sno_float_to_rat_pow_of_two_denom.
31 179 storres
32 246 storres
sys.stderr.write("\t...sageNumericalOperations loaded.\n")