Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   

Die mobilen Seiten von c++.de:
http://m.c-plusplus.de
Infos hier [BETA]

  
c++.de :: Mathematik und Physik ::  Nachkommastellen mit Modulo -> Binärzahlen?     Zeige alle Beiträge auf einer Seite Auf Beitrag antworten
Autor Nachricht
Thilo87
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2012
Beiträge: 36
Beitrag Thilo87 Mitglied 18:13:31 27.07.2012   Titel:   Nachkommastellen mit Modulo -> Binärzahlen?            Zitieren

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:

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
    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
SeppJ
Moderator

Benutzerprofil
Anmeldungsdatum: 10.06.2008
Beiträge: 17983
Beitrag SeppJ Moderator 21:15:11 27.07.2012   Titel:              Zitieren

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/w ....... ystem#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)

_________________
Du brauchst Hilfe?, Buchempfehlungen für C++,
Wie man in Fragen den richtigen Code postet,
The Definitive C++ Book Guide and List


Zuletzt bearbeitet von SeppJ am 21:17:03 27.07.2012, insgesamt 1-mal bearbeitet
Thilo87
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.06.2012
Beiträge: 36
Beitrag Thilo87 Mitglied 11:47:07 28.07.2012   Titel:              Zitieren

Doch, es stimmt :D Lustiger Zufall. Das hatte ich gar nicht vor, zu programmieren ;)
c++.de :: Mathematik und Physik ::  Nachkommastellen mit Modulo -> Binärzahlen?   Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info und www.c-plusplus.net enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.