Hallo zusammen, ich benutze volgende funktion: double chartodouble(char *grad) { double ergebnis = 999.999; // ungültiger Wert double d; double g; char *endp; g = strtod(grad, &endp); if (grad != endp && *endp == '\0') { d = trunc(g/100); ergebnis = d + (g - d*100)/60; } return ergebnis; } aufgerufen wird die so: chartodouble("123.456"); im AVRStudio5 kann ich es nicht kompilieren. sobald ich "g = strtod(grad, &endp);" rausnehme. Geht alles. Natürlich ohne berechnung. included sind: #include <math.h> #include <stdint.h> #include <stdlib.h> Kann mir bitte jemand helfen. Ich weiss nicht weiter. Danke Gruss Milan
milan schrieb: > Kann mir bitte jemand helfen. Ich weiss nicht weiter. nur wenn du uns sagst was nicht geht? > im AVRStudio5 kann ich es nicht kompilieren. gibt es eine fehlermeldung?
also ich kann es nur nicht kompilieren! Feher: ========== Build: 0 succeeded or up-to-date, 1 failed, 0 skipped ========== Das wars! Keine Fehler meldung. nix. mit myAVR Workpad kann ich die ohne Probleme kompolieren. sobald ich die zeile: g = strtod(grad, &endp); rausnehme. kann ich es mit AVR Studio 5 kompilieren, mit geht nicht.
im myAVR Workpad habe ich das noch // LinkerOption: -Wl,-u,vfprintf -lprintf_flt -lm wenn ich das rausnehme kann ich es auch nicht kompilieren. wie kann ich das im AVR Studio eingeben??? oder liegt es an dem?? Gruss Milan
Hallo zusammen, ich habe es. man muss libm.a unter libraries einfügen. funktionier super. Danke trotzdem. Gruss Milan
milan schrieb: > double ergebnis = 999.999; // ungültiger Wert für sowas definiert man normalerweise wenigstens ein define, damit beide Seiten (aufrufer und Berechner) das selbe testen übrigends haben IEEE-Floats für sowas gibts extra Werte NaN wäre das in deinem Fall Leider scheint es Compilerabhängig zu sein, wie man einem Float/Double einen NaN Wert zuweist
In C99 gibt es die funktion nan() dafür. Und in GCC zusätzlich __builtin_nan das aber zur Compilezeit optimieren kann weil das Argument bekannt ist:
1 | float nan_0 () |
2 | {
|
3 | return __builtin_nanf ("0"); |
4 | }
|
5 | |
6 | double nan_23 () |
7 | {
|
8 | return __builtin_nan ("23"); |
9 | }
|
Die Funktion weist noch einen ganz üblen Fehler auf, der sich aber vermutlich erst später als unerklärlicher Seiteneffekt zeigen wird... Ein Tipp: Es wird fremder Speicher überschrieben.
mist jetzt habe ich mich auch verrirren lassen, ignoriert meinen Betrag. Code stimmt schon.
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.