Resteberechnung Division

Neue Frage »

Thilo87 Auf diesen Beitrag antworten »
Resteberechnung Division
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 hier kennt sich jemand etwas mit dem Programmieren aus. Also ich habe mir die Funktion geschrieben:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
    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,

Thilo
Rmn Auf diesen Beitrag antworten »
RE: Resteberechnung Division
Das ist kein Zufall dieser Algorithmus prüft dann, ob bei gegebenem a<b auch 2a<b ist, und gibt die Antwort in Form von 1 oder 0.
Beispiel:
1)wähle a = 5 und b = 6, dann
5 * 2 / 6 = 1
2)wähle a = 2 und b = 6, dann
2 * 2 / 6 = 0
Thilo87 Auf diesen Beitrag antworten »

Ja, habe es auch gerade nocheinmal mit einer Tabelle abgeglichen. Scheint alles zu stimmen. Das sind die richtigen Binärzahlen. Also mit a *= 10 habe ich das Dezimalsystem, mit a *= 2 das Binärsystem. Dann kann ich also jedes mögliche n-Zahlensystem wählen, indem ich a *= n schreibe? Das ist ja lustig Big Laugh
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »