Hi, wollte mal kurz ein kleines C Programm machen, nun ist es aber schon
etwas länger her als ich das letzte mal C in Konsolen Form verwendet
habe.
Frage ist nur funktioniert dies hier überhaupt ?
Funktion liest sich ja raus, er soll mir die Spannung übern PTC
rausgeben bei einer bestimmten Temp.
Frage ist nun, schafft long double überhaupt -0.00005802 oder was nehme
ich dort am besten.
1
longdoubleWiderstandPTC;
2
longdoubleTemp;
3
longdoubleSpannungPTC;
4
longdoubleReff;
5
longdoubleVorwiderstand;
6
longdoubleStrom;
7
longdoubleZwischenWert1;
8
longdoubleBitWert;
9
10
printf("Spannung fuer den ADC berechnen !\n");
11
printf("Geben sie hier die benoetigten Groessen ein...\n");
Jakob schrieb:> Frage ist nun, schafft long double überhaupt -0.00005802 oder was nehme> ich dort am besten.
Ein normaler double tut es auch. 15 bis 16 signifikante Stellen sollten
dicke ausreichen.
Und wenn du dann hier
> WiderstandPTC = -0.00005802*(Temp*Temp)+0,390802*Temp+100;
auch noch korrekterweise einen Dezimalpunkt anstelle eines Kommas
verwenden würdest, dann würden die Zahlenwerte sogar stimmen.
Jakob schrieb:> Frage ist nur funktioniert dies hier überhaupt ?
Was genau willst du jetzt wissen, und was genau verlangst du jetzt vom
geneigten Forenuser?
Kompilier das Programm, und schau, was passiert. Lässt es sich nicht
kompilieren, gibt es Fehlermeldungen, die dir weiterhelfen. Lässt es
sich nicht linken, dito. Lässt es sich kompilieren und linken, lass es
halt laufen, und schau, was es macht.
Jakob schrieb:>Frage ist nun, schafft long double überhaupt -0.00005802 oder was nehme>ich dort am besten.
Um das genauer zu beantworten, musst du in der Doku zu genau dem gcc
nachlesen, den du verwendest. Die Datentypenbreite ist
plattformabhängig.
Oliver
Oliver schrieb:> Um das genauer zu beantworten, musst du in der Doku zu genau dem gcc> nachlesen, den du verwendest.
Nein, selbst ein simpler 32-bit-float reicht dafür locker aus, denn
es sind gerade mal vier signifikante Dezimalstellen gefragt (float
hat 6...7, und der C-Standard fordert von double mehr als diese).
Also erstmal.. warum überhaupt Float benutzen? macht dein Programm nur
langsamer... Kannst du das vermeiden? Wenn es nur um die letzten 4-5
stellen geht.. Multipliziere den mist den du irgendwoher bekommst so
gescheit, dass du am ende statt 0,00000xxxx einfach xxxx da stehen hast.
Floats sollte man eigentlich, wenn man es kann, vermeiden.
z.b. kannst du dann sowas hier machen
printf("\n\nSpannung am PTC betraegt : 0,0000%Lf",SpannungPTC);
somit gibts du das Kommata und die Nullen einfach als Text vor.
Jakob schrieb:> Ich schließe das ganze.> War nur der . mit einen , vertauscht und benutze doch etwas andere> Sensoren.> Funktionieren tut das ganze ;D
Macht dein Programm trotzdem nicht gut.. und vor allem groß wie Sau
Kann man eleganter lösen
Kris M. schrieb:> Kann man eleganter lösen
Aha. Das weißt du so, ohne den Rest seiner Daten zu kennen?
Du bist wirklich gut, wenn du das kannst. :-)
Im Übrigen dürfte es hier ausnahmsweise mal nicht um AVRs gehen
(die haben sowieso weder ein ernstzunehmendes "long double" noch
ein scanf-Format dafür), sondern schätzungsweise eher um normale
PCs. Diese wiederum haben seit dem i486 inhärent eine
Gleitkommaeinheit, es kann dann gut sein, dass das Skalieren vieler
Integer-Zahlen sogar ressourcenintensiver ist als das bisschen
Gleitkomma.
Aber das nur nebenbei. Selbst auf einem AVR kann Gleitkomma gut und
gern die bessere Wahl sein, wenn es nämlich die Dynamik der Daten
verlangt. Ob das der Fall ist, kann man mit den paar Codezeilen
überhaupt nicht abschätzen.