Forum: Compiler & IDEs libdecnumber für AVR compilieren


von ldn (Gast)


Lesenswert?

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

von Jan VI (Gast)


Lesenswert?

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.

von ldn (Gast)


Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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
von ldn (Gast)


Lesenswert?

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...

von ldn (Gast)


Lesenswert?

Oder ich frage mal anders:
Was für ein Problem lösen die DecFloats dann? Ohne Problem hätten sie 
imho eher weniger Daseinsberechtigung

von Nase (Gast)


Lesenswert?

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...

von ldn (Gast)


Lesenswert?

Okay, und wie kann man die lib nun für den AVR bauen?

Entschuldigt diese evtl. dumme Frage.

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.