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.
Ich aber nicht ^^ Bei mir funzt folgende Zeile nicht und ich weiß nicht warum:
1 | //soll alle 5 Schritte eine Variable setzen
|
2 | if (modf(X, 5) == 0){ |
3 | //Variable setzen
|
4 | }
|
Die Variable wird auch dann gesetzt, wenn X mod 5 1,2,3 usw. ergibt... kann mir jemand erklären warum? Mfg, JayJay
Manoman...
1 | #include <stdio.h> |
2 | #include <math.h> |
3 | |
4 | int main() |
5 | { |
6 | double x=1.23456; |
7 | |
8 | double integral; |
9 | double fractional; |
10 | |
11 | fractional = modf(x, &integral); |
12 | |
13 | printf("Integral: %f\n", integral); |
14 | printf("Fractional: %f\n", fractional); |
15 | |
16 | return 0; |
17 | } |
Ergibt: Integral: 1.000000 Fractional: 0.234560 Unselbstständige Cut&Paste-Generation!
"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
@ 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
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 | double nachkomma; |
2 | double zwischenergebnis; |
3 | |
4 | zwischenergebnis = X / 5; |
5 | nachkomma = modf(zwischenergebnis, andere_unnütze_variable); |
6 | |
7 | if (nachkomma == 0){ |
8 | //Variable setzen
|
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...
@ JayJay Der "Befehl" ist in C ein Operator und schreibt sich "%". Ein gutes C Buch oder Tutorial sollte ihn beschreiben.
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...
> ... 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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.