Schweben, auf binäre

Ich versuche zu konvertieren, eine floating-point-Zahl binäre Darstellung; wie kann ich das erreichen?
Mein Ziel ist es jedoch nicht beschränkt werden, die durch 2m also ich bin der Hoffnung, für etwas, das könnte leicht erweitert werden, um jeder Basisstation (3, 4, 8) ecc.

Habe ich eine einfache Implementierung so weit für Ganzzahlen:

import string

LETTER = '0123456789' + string.ascii_lowercase
def convert_int(num, base):
    if base == 1:
        print "WARNING! ASKING FOR BASE = 1"
        return '1' * num if num != 0 else '0'

    if base > 36: raise ValueError('base must be >= 1 and <= 36')

    num, rest = divmod(num, base)
    rest = [LETTER[rest]]
    while num >= base:
        num, r = divmod(num, base)
        rest.append(LETTER[r])
    rest.reverse()
    return (LETTER[num] if num else '') + ''.join(str(x) for x in rest)

jede Hilfe dankbar 🙂

edit:

def convert_float(num, base, digits=None):
    num = float(num)
    if digits is None: digits = 6

    num = int(round(num * pow(base, digits)))
    num = convert_int(num, base)
    num = num[:-digits] + '.' + num[:digits]
    if num.startswith('.'): num = '0' + num
    return num

ist das richtig? warum bekomme ich dieses Verhalten?

>>> convert_float(1289.2893, 16)
'509.5094a0'
>>> float.hex(1289.2983)
'0x1.42531758e2196p+10'

p.s.
Wie konvertieren von float-Zahl in eine Binärzahl um?

Ich habe gelesen, dass die Diskussion, aber ich bekomme nicht die Antwort.. ich meine, funktioniert es nur für 0.25, 0.125? und ich verstehe nicht den Satz "muss in umgekehrter Reihenfolge"...

Die Antwort auf die vorangegangene Frage scheint ziemlich offensichtlich für mich. Warnung: float-Arithmetik mit ungeraden Basen ist im Allgemeinen nicht empfohlen.
Willst du floating-point-zahlen (die aus der significant_digits und ein exponent) oder eine Natürliche Zahl mit einem "binäre Stelle" dazwischen? Beide sind eigentlich nicht schwer (wenn man einmal Begriffen der Mathematik), aber anders.

InformationsquelleAutor Ant | 2011-01-29

Schreibe einen Kommentar