Hallo, benutze gerade die Procyon AVRLIB daraus das gpstest-Porgramm. In einer Umrechnung wird "modf" benutzt. Leider verstehe ich nicht die englische Erklärung zu dem Befehl. Kann mir einer erklären, was die Function macht.... Vielen Dank
Sie trennt den gebrochenen und den ganzzahligen Anteil einer Gleitkommazahl. Der gebrochene Anteil wird als Funktionsrückkehrwert zurück gegeben, der ganzzahlige Anteil wird an der Speicherstelle abgelegt, auf die das zweite Funktionsargument zeigt.
Danke... verstanden... Bernd
Gast
#1193796
Ich aber nicht ^^ Bei mir funzt folgende Zeile nicht und ich weiß nicht warum:
1 | |
2 | |
3 | |
4 | |
Die Variable wird auch dann gesetzt, wenn X mod 5 1,2,3 usw. ergibt... kann mir jemand erklären warum? Mfg, JayJay
Gast
#1193807
Manoman...
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
Ergibt: Integral: 1.000000 Fractional: 0.234560 Unselbstständige Cut&Paste-Generation!
Gast
#1193823
"Unselbstständige Cut&Paste-Generation!" Danke, Danke sehr liebenswürdig... aber programmier eigentlich nur in Java und bin in C nicht grade heimisch. Da die Syntax von C und Java sehr ähnlich ist (zumindest was verzweigungen und schleifen angeht) hab ich das auf dem Weg probiert... Dein Code erklärt mir leider nicht viel! wie wird denn "integral" initialisiert? Und warum steht ein "&" vor integral in der modf() funktion? Ich wär dir sehr verbunden, wenn du mir sagen könntest, wo der fehler in meinem Code liegt... Vielleicht hab ich ja auch irgendwas grundlegendes der modf() funktion nicht verstanden... Normalerweise sollte modf(x,y) doch den Rest der Division von x/y geben, z.b. bei 43 mod 5 = 3. Mfg, JayJay
Gast
#1193845
@ JayJay "modf" ist eben NICHT das selbe wie "mod". Da Jörg das schon erklärt hat dürfte doch der Unterschied klar sein. Oder siehst Du da eine Beziehung zwischen der Modulo-Division und dem extrahieren des gebrochenen Anteils einer Float-Zahl?
Wie Jörg bereits gesagt hat, modf trennt eine Zahl in die Zahl vor dem Komma und die nmach dem Komma. Das heißst dass z.b. 1.23456 in 1 und 0.23456 aufgespalten wird. Der erste Parameter ist die Zahl selbst, welche getrennt werden soll. Da eine Funktion nur einen Wert zurückgeben kann (von Structs und Klassen abgesehen), wird der Funktion mit dem zweiten Parameter die Adresse der Zahl mitgeteilt, in die die Funktion den einen Wert, hier den ganzzahligen Wert, reinschreibt. Der Operator & referenziert die darauffolgende Variable, sprich er bildet ihre Adresse, die die Funktion benötigt. Den Komma-Teil gibt die Funktion direkt zurück. MfG Mark
Gast
#1193878
Gut, dann lichtet sich der Nebel für mich ^^ Aber seh ich das dann richtig, dass es in AVR GCC kein mod-befehl/funktion gibt? Zumindest konnte ich in math.h nur modf() finden und kein mod()... Wär ja ein bissl seltsam, dass es diesen so häufig gebrauchten Befehl nicht gibt! 0.o Denn falls mod tatsächlich nicht zur Verfügung gestellt wird muss man ja wahrscheinlich diesen unschönen Umweg gehen:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
Ich find das irgendwie ziemlich umständlich zumal ich dann mit Fließkommazahlen arbeiten muss, obwohl ich immer nur ganzzahlige Werte teilen werde... so long...
Gast
#1193892
@ JayJay Der "Befehl" ist in C ein Operator und schreibt sich "%". Ein gutes C Buch oder Tutorial sollte ihn beschreiben.
Gast
#1193926
Ahhh... kay! Manchmal wundert man sich schon über die eigene Doofheit... warum hab ich zur Hölle einfach nicht daran gedacht in den Operatoren nachzuschaun... kopfschüttel Ich danke euch für eure Antworten... immerhin kann ich jetzt modf() einsetzten, falls ich es brauche ^^ so long...
Gast
#1193969
> ... aber programmier eigentlich nur in Java und bin in C nicht grade > heimisch. > ... obwohl ich immer nur ganzzahlige Werte teilen werde... Wieso hast du dann nicht als erstes den %-Operator ausprobiert? An der Stelle verhält sich C genauso wie Java. Aber jetzt weißt du's ja. Die FP-Variante von a%b heißt übrigens fmod(a,b). modf ist etwas anderes, wie ja schon einige geschrieben haben.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.