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.
Danke, ist ja schon mal ganz gut. Aber es müsste doch auch was mit double geben. Der Compiler meckert nicht. Selbst bei long double. Oder übersehe ich da was ?
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 ?
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...
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!!
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.
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.
KF26046 schrieb: > Ich bräuchte aber mindesten 14 Stellen Die Entfernung Erde - Mond in mm ? MfG Klaus
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
KF26046 schrieb: > Eigentlich will ich "nur" die Distanz zwischen zwei geograph.- > Koordinaten berechnen. Hatte sowas schon mal mit einem ARM (GNUARM) > gemacht, da ging alles problemlos. Überlege dir, was du wirklich brauchst und rechne dann in ganzen Zahlen (ggf. skaliert nennt es sich dann Festkommazahl).
Sind λ geographische Länge und ϕ geographische Breite, dann ist die Entfernung, angegeben im Bogenmaß
Das von Hand nach Fixedpoint zu klöppeln mach echt keinen Spaß...
Aber im Ernst: auch Winkelfunktionen kann man aus Tabellen linear interpolieren. Und die Tabellen muß man nicht mit dem Taschenrechner erstellen, sondern kann sie auf dem PC rechnen lassen und als Quelltextfragment ausgeben.
Vorschlag bitte wie SIN, COS , ARCCOS mit ganzen Zahlen ? Keine gute Idde!
KF26046 schrieb: > Vorschlag bitte wie SIN, COS , ARCCOS mit ganzen Zahlen ? Das mit dem Skalieren überlesen? Wenn du etwas Milch brauchst und eine Kuh zu viel ist, dann kann man auch einen Liter Milch nehmen oder noch kleinere Dosen.
Klaus Wachtler schrieb: > Aber im Ernst: auch Winkelfunktionen kann man aus Tabellen linear > interpolieren. *hüstel* Bei auch nur annähernd der geforterten Genauigkeit? Und arccos hat Singularitäten, d.h. man brauch mindestens 2 Formeln. Also neben arccos vermutlich noch arcsin; je nach Wertebereich des Arguments.
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.
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.
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ß.
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.
KF26046 schrieb: > Eigentlich will ich "nur" die Distanz zwischen zwei geograph.- > Koordinaten berechnen. Was soll es denn werden? Autopilot, der es über den Atlantik schafft? Für alles im Umkreis von einigen Zig-Kilometern kannst du auch bei annehmbarer Genauigkeit annehmen, dass die Erde flach ist, sprich kartesisch rechnen.
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.