Forum: Compiler & IDEs double auf AVR mit 6-7 signifikanten Ziffern?


von Immanuel N. (sputnik)


Lesenswert?

Hallo Leute

Ich komme dummerweise in letzter Zeit nicht mehr um floats rum bei der 
Programmierung meines AVR's in C. Also habe ich mich damit beschäftigt 
und dabei rausgefunden, dass ein normaler float nur 6-7 signifikante 
Ziffern hat. Naja, nicht so schlimm, ich habe ja noch den double, der 
sollte 15-16 signifikante Ziffern habe 
(http://de.wikipedia.org/wiki/IEEE_754). Nun habe ich das ausprobiert 
und dabei festgestellt, dass ich auch mit einem double nur 6-7 
signifikante Ziffern habe. Kann mir jemand erklären, warum das so ist? 
Sollte ja noch IEEE nicht so sein (siehe Link).

mit freundlichen Grüssen
Sputnik

von Oliver (Gast)


Lesenswert?

RTFM

Für die avr-libc z.B. steht dort:
>Data types:
>char is 8 bits, int is 16 bits, long is 32 bits, long long is 64 bits, >float and 
double are 32 bits

Oliver

von Immanuel N. (sputnik)


Lesenswert?

Vielen Dank für den Hinweis. Ich habe es aber bis jetzt noch nicht im 
Manual von avr-libc gefunden.

Aber wiso ist den das so? Was bringt denn so der double, wenn er 
tritzdem single precisision ist?

von Tom (Gast)


Lesenswert?

Portabilität. Programme von woanders laufen wenigstens "so ungefähr". In 
der C spec ist ja AFAIK nicht garantiert, dass double genauer als float 
ist.

von Andreas K. (a-k)


Lesenswert?

Tom wrote:

> In der C spec ist ja AFAIK nicht garantiert, dass double genauer
> als float ist.

Aber es ist für "double" ein Mindestgenauigkeit von 10 Dezimalstellen 
gefordert. GCC/AVR ist also in dieser Hinsicht nicht ANSI-konform.

von Kai G. (runtimeterror)


Lesenswert?

float ist in den meisten Programmiersprachen einfach ein Alias für das 
default-Fließkommaformat - meist single oder double

single und double kann in jeder Programmiersprache was anderes 
bedeuten. Bei int isses ähnlich.

von sechszweisechs (Gast)


Lesenswert?

Waere nun nicht die passende Frage, wie man die Library aout 64bit float 
aufbohren kann ?

von Andreas K. (a-k)


Lesenswert?

sechszweisechs wrote:

> Waere nun nicht die passende Frage, wie man die Library aout 64bit float
> aufbohren kann ?

Du musst das gleichzeitig auch dem Compiler beibringen. Das ist kein 
unüberwindliches Hindernis, da er mit 64-Bit Daten bereits umgehen kann, 
aber bis dahin gilt sizeof(double)==4, da ändert keine Library etwas 
daran.

Eher ein Grund, für solche Jobs geeignetere Controller zu verwenden.

von Oliver (Gast)


Lesenswert?

Eine einfache Suche hier im Forum fördert u.A. das hier zu Tage:

Beitrag "CrossWorks AVR"

Vielleicht hilfts weiter.

Oliver

von olaf (Gast)


Lesenswert?

> Aber wiso ist den das so? Was bringt denn so der double, wenn er
> tritzdem single precisision ist?

Also die Wahrheit ist wohl das du, ja genau DU!, dich noch nicht 
hingesetzt hast und eine Libary fuer double programmiert hast.

Andere Leute haben sich halt gedacht das es verdammt viel Arbeit ist 
sowas zu machen und sie dann besser auf einen anderen Prozessor 
umsteigen wo die Arbeit bereits erledigt ist. Zumal so eine Libary ja 
auch ordentlich Platz im Rom braucht und einiges an Ram verloren geht.

Mittlerweile wird man es einem dicken modernen AVRs sicherlich 
beibringen koennen, trotzdem ist sowas natuerlich nicht gerade ein 
Geschwindigkeitswunder. Weshalb dann wohl die meisten Menschen entweder 
feststellen das sie double garnicht brauchen, oder wenn es sich wirklich 
nicht umgehen laesst dann gleich einen Prozessor nehmen der das etwas 
besser unterstuetzt.

Und der verbleibende Rest, als DU, hat es eben noch nicht programmiert. 
:-)

Olaf

von sechszweisechs (Gast)


Lesenswert?

Richtig. Wenn's double nicht gibt, muss man zuerst herausfinden, ob 
man's wirklich braucht, und falls doch, selbst machen. Oder eine andere 
Library nehmen.

von Oliver (Gast)


Lesenswert?

>Weshalb dann wohl die meisten Menschen entweder feststellen das sie >double 
garnicht brauchen,

Die meisten werden wohl feststellen, daß sie noch nicht einmal float 
brauchen.

Oliver

von Rolf Magnus (Gast)


Lesenswert?

Ich würde eher behaupten, daß viele zwar float bzw. double eigentlich 
nicht bräuchten, das aber nicht feststellen.

von Michael Wilhelm (Gast)


Lesenswert?

Die schnellste Lösung für AVRs:

IAR Systems.

Wenn du auf C-Spy und MISRA verzichten kannst, liegst du bei knapp unter 
2k€ (Netto).

MW

von Karl H. (kbuchegg)


Lesenswert?

Rolf Magnus wrote:
> Ich würde eher behaupten, daß viele zwar float bzw. double eigentlich
> nicht bräuchten, das aber nicht feststellen.

:-)

... aber irgendwann merken dass ihre Rechenergebnisse auf
'seltsame Art' nicht stimmen.

von Immanuel N. (sputnik)


Lesenswert?

Hallo Leute

Ich danke euch alles für eure Antworten. Ich denke auch, dass man 
vielfach den float oder double vermeiden kann/sollte und damit besser 
fährt. Naja, wie dem auch sei: Ich persönlich gehe den floats und 
doubles aus dem Wege, wo ich kann, nur leider hat es dieses Mal nicht 
ganz geklappt.

Ich wünsche euch allen einen schönen Tag
Sputnik

von Klaus H. (Gast)


Lesenswert?

Überlege, ob du mit einem eigenen Format nicht ans Ziel kommst:

* Festkommaformat
  (z.B. 16bit Vorkomma + 16 bit Nachkommawert)
* struct Mantisse + Exponent
  (1 int Wert für Mantisse, 1 Wert für Exponent).
* Kombination von beidem

Fange am besten damit an den Zahlenbereich einzugrenzen/zu definieren
und die benötigten Operationen.


Auch komerzielle Bibliotheken haben ggf. Probleme.
Ich weiss nicht ob IAR den Bug noch hat, aber früher waren
die Float Library Funktionen nicht reentrant.

Klaus

von Immanuel N. (sputnik)


Lesenswert?

Klaus H. wrote:
> Überlege, ob du mit einem eigenen Format nicht ans Ziel kommst:
>
> * Festkommaformat
>   (z.B. 16bit Vorkomma + 16 bit Nachkommawert)
> * struct Mantisse + Exponent
>   (1 int Wert für Mantisse, 1 Wert für Exponent).
> * Kombination von beidem
>
> Fange am besten damit an den Zahlenbereich einzugrenzen/zu definieren
> und die benötigten Operationen.

Ja, das ist dann der Weg, wenn es wirklich gar nicht mehr geht. Ist eben 
ein wenig Arbeit, aber für ein optimales Ergebnis kann/sollte man die 
Arbeit nicht scheuen.

Ich habe mir auch schon Gedanken zu einem eigenen Format gemacht, habe 
aber bisher immer einen akzeptablen Weg mit schon vorhandenen Mitteln 
gefunden und deshalb noch nichts eigenes gemacht. Es dauert ja auch 
immer ein Weilchen, bis solche mathematische Funktionen schön ausgereift 
sind und auch wirklich schön durchoptimiert.

ich wünsche ein schönes Wochenende
Sputnik

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
Noch kein Account? Hier anmelden.