Hallo Forum, beim durchstöbern der GCC-Sourcen ist mir das Paket libdecnumber aufgefallen. Kurze Frage dazu: - Kann man die lib auf einem AVR benutzen? - Wenn ja, wie kompiliert man diese richtig? mfG, ldn
libdecnumber ist ein interne GCC-Bibliothek die beim Bauen von GCC mitgebaut wird, wenn man GCC mit Decimal-Float Unterstützung kompiliert. Ob du dir einen GCC für AVR mit Decimal-Float Unterstützung kompilieren kannst? Keine Ahnung, ich habe das nicht ausprobiert. Decimal-Float ist eher ein Nischen-Zahlenformat. So richtig notwendig ist es nicht - wenn man programmieren kann. Es wird gerne für Kosmetik eingesetzt, um schöne Zahlen darstellen zu können, gerundet wird natürlich trotzdem. Nur ist man diese Art von Rundung eher gewohnt. Es gibt ein paar Anwendungen, wo einem Decimal-Floats das Geschäft erleichtert. Die hat man nicht selten mit BCD oder ints programiert. Geht auch - wenn man weiß was man tut. Was du garantiert nicht mit Decimal-Floats auf AVRs bekommst ist Geschwindigkeit. Floating-Point ist auf AVRs mangels Hardware-Unterstützung schon langsam. Decimal-Floats werden nicht besser sein.
ich habe ein bisschen weiter gesucht und entdeckt (wie Jan gesagt hatte) dass der GCC dezmal-floats seit 4.2 anbietet (siehe 1.). Also schnell mal _Decimal64 a; ausprobiert und:
1 | Error decimal floating point not supported for this target |
war ja klar... Weiß jemand ob man das dem AVR-GCC irgendwie beibringen kann, oder ist das gar nicht möglich (fehlender support oder ähnliches) aber vielen dank schon mal PS: Geschwindigkeit brauche ich nicht, der AVR wartet sowieso größtenteils auf menschliche Eingaben, und der Mensch wird einige ms (das dürfte die Gößenordnung sein, denke ich) nicht mal merken. Und ich dachte das decimal-fp die Ungenauigkeiten von binary-fp umgeht, oder liege ich da falsch? 1. https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html
ldn schrieb: > Und ich dachte das decimal-fp die Ungenauigkeiten von binary-fp umgeht, > oder liege ich da falsch? > > 1. https://gcc.gnu.org/onlinedocs/gcc/Decimal-Float.html
1 | The decimal floating types are _Decimal32, _Decimal64, and _Decimal128. They use a radix of ten, unlike the floating types float, double, and long |
2 | double whose radix is not specified by the C standard but is usually two. |
Nicht wirklich. Decimal Float leiden im Prinzip unter genau den gleichen Problemen wie Floating Point Zahlen, die auf dem 2-er System aufgebaut sind: Sind die Stellen der Basis aufgebraucht, dann verlierst du Information. Es ist die immer gleiche alte Leier: so wie ein Notizbuch nur endlich viele Seiten zum reinschreiben hat, so hat auch ein 'normaler' Datentyp nur endlich viele Bits. Wenn die alle aufgebraucht sind, dann musst du irgendeinen Tod sterben.
:
Bearbeitet durch User
Was bringt dann die Basis 10? Irgendwie verstehe ich grad nchts mehr... Habe ich dann mehr Stellen? Eigentlich müssten es ja weniger sein, weil man 4bit pro Ziffer braucht. Mglw. bin ich aber auch komplett auf dem Holzweg, dann dürft ihr mich bitte zurückschubsen...
Oder ich frage mal anders: Was für ein Problem lösen die DecFloats dann? Ohne Problem hätten sie imho eher weniger Daseinsberechtigung
ldn schrieb: > Was für ein Problem lösen die DecFloats dann? Ohne Problem hätten sie > imho eher weniger Daseinsberechtigung Der Benutzer kann '0.3' eingeben und kriegt auch rundungsfrei wieder '0.3' heraus, und nicht '0.299999999999' oder sowas...
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.