Nachkommastellen mit Modulo -> Binärzahlen?



  • Hallo,

    wenn man eine Division a/b durchführt, dann werden die Nachkommastellen ja mit den Resten berechnet. Um einen Algorithmus für den PC zu programmieren, müsste man also den Modulo einsetzen, was man ja sonst quasi im Kopf macht.

    Ich hoffe ihr verzeiht, dass das jetzt Visual Basic-Code ist, aber es geht ja im Grunde um den Algorithmus. Der Code wäre problemlos auf C++ umzuschreiben.

    Also ich habe mir die Funktion geschrieben:

    Public Function n(ByVal a As Double, ByVal b As Double, Optional ByVal Ziffern As Double = 10)
            Dim sDelimiter As String = "."
    
            Dim sRes As String = ""
    
            If a < b Then sRes += "0" & sDelimiter
    
            If a Mod b = 0 Then Return a / b
    
            If a > b Then
                sRes += "" & (a - a Mod b) / b & sDelimiter
                a = a Mod b
                If a = 0 Then Return sRes
            End If
    
            For i = 1 To Ziffern
                Dim nz As Double = 0
                While a < b
                    a *= 10 //HIER HIER HIER
                    nz += 1
                End While
    
                If nz > 1 Then
                    For j = 2 To nz
                        sRes += "0"
                    Next
                End If
    
                sRes += "" & (a - a Mod b) / b
                a = a Mod b
                If a = 0 Then Exit For
            Next i
    
            Return sRes
        End Function
    

    Eigentlich macht sie nichts weiter, als das, was wir bei der Division im Kopf machen. Funktioniert auch wunderbar. Jetzt zur Frage: Wenn ich bei der Zeile mit "//HIER HIER HIER" statt "a *= 10" "a *= 2" schreibe, dann bekomme ich ein Ergebnis ausschließlich aus Nullen und Einsen. Sind das die richtigen Binärzahlen, oder ist das nur Zufall?

    Danke,

    Grüße,

    Thilo


  • Mod

    Könntest du den Code bitte mal verständlich schreiben? Variablennamen mit weniger als 3 Zeichen sind ziemlich unzugänglich bei fremden Code.

    Wenn ich es richtig entziffert habe, dann: Nein, das sind zwar konstruktionsbedingt nur Nullen und Einsen, aber das Ergebnis stimmt nicht. Warum überprüfst du es nicht einfach, wenn du schon ein Programm hast? Ein Gegenbeispiel sollte sich schnell finden. Falls du Schwierigkeiten mit dem Ausrechnen von Binärbrüchen im Kopf/Papier hast, dann findest du hier ein paar einfache Ergebnisse:
    http://en.wikipedia.org/wiki/Binary_numeral_system#Fractions_in_binary

    (P.S.: Falls die Ergebnisse sich entgegen meiner Analyse doch als richtig herausstellen sollten, dann schreib das bitte. Dann muss ich mal tiefer in den Code einsteigen, was du da wirklich treibst)



  • Doch, es stimmt 😃 Lustiger Zufall. Das hatte ich gar nicht vor, zu programmieren 😉


Anmelden zum Antworten