MSPGCC : Double , long double

Gast #2655804
Lesenswert?

Wo kann ich den bitte die Beschreibung der bei MSPGCC verfügbaren
Zahlenformate finden? Irgendwie finde ich nix.

Mir reicht double nicht aus und ich wollte long double benutzen.
Der Compiler nimmt es, aber irgendwie geht es damit aber auch nicht
besser. Kann eigentlich keinen Unterschied feststellen.
Gast #2655952
Lesenswert?

Muss mich insofern berichtigen: double würde mir reichen, wenn es
gehen würde.

Ich sehe keinen Unterschied zwischen float, double und long double.
Der Compiler "frisst" aber alles. Das Ergebnis ist immer nur 8 stellig
hinter dem Komma. Wobei bei 7 Stellen nach dem Komma schon 
Rundungsfehler
auftreten (wenn ich richtig sehe). Ich bräuchte aber mindesten 14 
Stellen
hinter dem Komma.

In float.h gibt's was mit DBL und LDBL!

Hat jemand eine Idee dazu ?
Persönliche Seite #2656017
Lesenswert?

Schaue in die Quellen, die lügen nicht ;-) und zwar nach
  gcc/config/msp430/msp430.h
in
  http://mspgcc.git.sourceforge.net/git/gitweb.cgi?p=mspgcc/mspgcc;a=tree;

Da steht:

#define SHORT_TYPE_SIZE 16
#define LONG_TYPE_SIZE 32
#define LONG_LONG_TYPE_SIZE 64
#define FLOAT_TYPE_SIZE 32
#define DOUBLE_TYPE_SIZE FLOAT_TYPE_SIZE
#define LONG_DOUBLE_TYPE_SIZE FLOAT_TYPE_SIZE
#define DEFAULT_SIGNED_CHAR 1

Die Interpretation des Orakels überlass ich dir...
Gast #2656387
Lesenswert?

Ok, danke. Das erklärt wohl warum immer Float-Genauigkeit rauskommt.

Eigentlich will ich "nur" die Distanz zwischen zwei geograph.-
Koordinaten berechnen. Hatte sowas schon mal mit einem ARM (GNUARM)
gemacht, da ging alles problemlos.
Die Genauigkeit der Berechnungen habe ich wohl beim MSPGCC übersehen.
Oft braucht man es da ja eigentlich auch nicht.

Jetzt habe ich ein Problem mehr!!
Gast #2656539
Lesenswert?

Aha, habe noch nie was davon gehört! Interessant!

Wo finde ich Infos was ich tun muss um MPFR mit MSPGCC zu nutzen ?
In der Docu steht  was von Linux Installation. Vermutlich setlle
ich mich nur zu blöde an.

Danke.
Persönliche Seite #2656562
Lesenswert?

KF26046 schrieb:

> Wo finde ich Infos was ich tun muss um MPFR mit MSPGCC zu nutzen ?
> In der Docu steht  was von Linux Installation. Vermutlich setlle
> ich mich nur zu blöde an.

Du willst auf MSP430 keine Linux-Libs nutzen ;-)

D.h. du musst dir eine Version für MSP430 selber cross-generieren oder 
fertige Builds irgendwo zusammensuchen.

config.sub erwähnt immerhin msp430, d.h. einfach configure --help und 
dann sowas wie

$ ../foo-source/configure --target=msp430 --enable-static 
--disable-shared --prefix=...

versuchen. Ein Blick ins erzeugte config.log kann auch hilfreich sein um 
sicherzustellen, daß die gewünschten cross-Tools genommen werden.

Minsestausstattung ist eine funktionierende und installierte 
msp430-Toolchain, zudem make, sed, awk, rm. test, und das ganze 
*nix-Geraffel.
Gast #2656923
Lesenswert?

Johann L. schrieb:
> D.h. du musst dir eine Version für MSP430 selber cross-generieren oder
> fertige Builds irgendwo zusammensuchen.

Johann, da wäre ich total überfordert. Bin froh wenn ich mit MSPGCC und
Eclipse zurecht kommen. Gibt's nicht irgendwo eine Anleitung was man im
Detail machen muss oder ein fertiges Paket und Bezugsquellen ?

Danke
#2657024
Lesenswert?

Johann L. schrieb:
> Bei auch nur annähernd der geforterten Genauigkeit?

Das kannst du steuern mit der Feinheit der Tabellen.
Gleitkommazahlen haben ja auch keine unendliche Genauigkeit, sondern 6-7 
Stellen (dezimal) bei float und ca. 13 bei double.
Bei glatten Verläufen kommt man da mit linearer Interpolation auch 
schnell hin.

>
> Und arccos hat Singularitäten, d.h. man brauch mindetsend 2 Formeln.
> Also neben arccos vermutlich noch arcsin; je nach Wertebereich des
> Arguments.

In der Nähe der Sing. hast du in diesem Fall wahrscheinlich eh etwas 
falsch gemacht, und mit float auch wieder nichts gewonnen.
Persönliche Seite #2657202
Lesenswert?

Klaus Wachtler schrieb:
> Johann L. schrieb:
>> Bei auch nur annähernd der geforterten Genauigkeit?
>
> Das kannst du steuern mit der Feinheit der Tabellen. [...]
> Bei glatten Verläufen kommt man da mit linearer Interpolation auch
> schnell hin.

Schnell? Bei linearer Interpolation ist die geht die Anzahl der 
Stützstellen umgekehrt proportional mit der geforterten Genauigkeit 
(falls die Funktionen wie hier stückweise gutmütig sind).

Selbst wenn "nur" die Genauigkeit von float nachgebildet werden soll, 
ist man in bei Hausnummern von 1E6 oder mehr.

Ich bin ja nicht mit MSP430 befasst, aber der Ansatz taucht einfach 
nicht.

Bei Approximationen höhrer Ordnung spart man deutlich an Speicherplatz; 
die Genauigkeit geht umgekehrt proportional mit der entsprechenden 
Potenz der Stützstellen, bei 3-er Ordnung also grob einige 100 Punkte 
für Genauigkeit im ppm-Bereich.

Aus naheliegenden Gründen ist Potenzreihenentwicklung ungeeignet.
Praktikabel ist zum Beispiel nach Bernsteinpolynomen zu entwickeln.

Die Crux ist dann nicht mehr die Auswertung, sondern die Berechnung der 
Polynome bzw. der Stütz- und Kontrollpunkte. Das geschieht zwar auf 
einem PC, dadurch wird die Aufgabe aber nicht weniger schwierig. Wenn 
man nämlich keine vernünftigen Punkte berechnet, geht die Genauigkeit 
nicht mehr nach der obigen Faustformel.

>> Und arccos hat Singularitäten, d.h. man brauch mindetsend 2 Formeln.
>> Also neben arccos vermutlich noch arcsin; je nach Wertebereich des
>> Arguments.
>
> In der Nähe der Sing. hast du in diesem Fall wahrscheinlich eh etwas
> falsch gemacht, ...

Nö, man hat nix falsch gemacht.

Berechne einfach arccos(x) mit x = 1 und wackle ein gaaanz klein wenig 
an x und schau was passiert!

> ... und mit float auch wieder nichts gewonnen.

Jo, das stimmt allerdings.
#2657264
Lesenswert?

Johann L. schrieb:
> Schnell? Bei linearer Interpolation ist die geht die Anzahl der
> Stützstellen umgekehrt proportional mit der geforterten Genauigkeit
> (falls die Funktionen wie hier stückweise gutmütig sind).
>
> Selbst wenn "nur" die Genauigkeit von float nachgebildet werden soll,
> ist man in bei Hausnummern von 1E6 oder mehr.

1. Nein. Bei den glatten Winkelfunktionen kommt man mit ein paar Hundert 
Stützstellen auf beachtliche Genauigkeiten.
Wenn du es nicht glaubst, kann ich dir gerne ein paar 
Vergleichsrechnungen machen.

2. ROM ist i.d.R. billig, und selbst ein paar Hundert Einträge im Flash 
bedeuten ja nicht, daß damit die Suchzeit linear ansteigt.
Entweder hat man eine feste Stützweite und kann sich aus dem Argument 
gleich die Stützstellen holen (O(1)), oder man nimmt im schlimmsten Fall 
binäre Suche (wenn man keine äquidistanten Stützstellen hat).

Johann L. schrieb:
> Nö, man hat nix falsch gemacht.
>
> Berechne einfach arccos(x) mit x = 1 und wackle ein gaaanz klein wenig
> an x und schau was passiert!

Wenn du aus einem Argument nahe bei 1 einen genauen Winkel berechnen 
willst, hast du etwas falsch gemacht.
Egal, mit welcher Genauigkeit du mit Gleitkommazahlen rechnest.

Da die Krümmung hier sehr gering ist, macht man mit Interpolation auch 
nichts mehr verkehrt.

Das Problem mit asin(etwa 1) kommt aus der Steigung in diesem Bereich. 
lineare Interpolation ist aber nur schlecht bei starker Krümmung - und 
die ist in keinem der hier gezeigten Fälle groß.
Persönliche Seite #2657287
Lesenswert?

Klaus Wachtler schrieb:
> Johann L. schrieb:
>> Schnell? Bei linearer Interpolation ist die geht die Anzahl der
>> Stützstellen umgekehrt proportional mit der geforterten Genauigkeit
>> (falls die Funktionen wie hier stückweise gutmütig sind).
>>
>> Selbst wenn "nur" die Genauigkeit von float nachgebildet werden soll,
>> ist man in bei Hausnummern von 1E6 oder mehr.
>
> 1. Nein. Bei den glatten Winkelfunktionen kommt man mit ein paar
> Hundert Stützstellen auf beachtliche Genauigkeiten.
> Wenn du es nicht glaubst, kann ich dir gerne ein paar
> Vergleichsrechnungen machen.

Peinlich. Anstatt meiner falschen Intuition zu folgen, hätte ich einfach 
nur in meinem eigenen Artikel anschauen müssen, wo die Abschätzung 
ausgeführt ist :-(

http://www.mikrocontroller.net/articles/AVR_Arithmetik/Sinus_und_Cosinus_(Lineare_Interpolation)#Aufbau_der_Tabelle

> Johann L. schrieb:
>> Nö, man hat nix falsch gemacht.
>>
>> Berechne einfach arccos(x) mit x = 1 und wackle ein gaaanz klein wenig
>> an x und schau was passiert!
>
> Wenn du aus einem Argument nahe bei 1 einen genauen Winkel berechnen
> willst, hast du etwas falsch gemacht.
> Egal, mit welcher Genauigkeit du mit Gleitkommazahlen rechnest.
>
> Da die Krümmung hier sehr gering ist, macht man mit Interpolation auch
> nichts mehr verkehrt.

Krümmung ist was anderes als 2-te Ableitung.

> Das Problem mit asin(etwa 1) kommt aus der Steigung in diesem Bereich.
> lineare Interpolation ist aber nur schlecht bei starker Krümmung - und
> die ist in keinem der hier gezeigten Fälle groß.

Sieht nochmal die verlinkte Rechnung. Dort steht nicht die geometrische 
Krümmung (Curvature) sondern die 2-te und 3-te Ableitung, und die sind 
nicht beschränkt.

Aber das Thenma ist eh durch — wie gesagt braucht man für den Bereich ne 
andere, angepasste Formel.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren