es gibt auch eine Test-Version von westfw, ganz vergessen:
https://forum.arduino.cc/index.php?a...;attach=267064
es gibt auch eine Test-Version von westfw, ganz vergessen:
https://forum.arduino.cc/index.php?a...;attach=267064
Das sollte gehen, eventuell komme ich heute Abend dazu die Werte aufzunehmen.
gerade gesehen, der Teensy 35 wurde von jemand anderem bereits getestet, ich hatte es erst nicht entdeckt, welcher Typ es genau war. Hab es oben eingefügt! Sieht aus, als ob auf dem teeny35 double noch deutlich langsamer läuft als auf dem Adafruit Metro M4, und übrigens, auch Matrix Algebra nutzt ja auch double statt float...![]()
Das hat eventuell mehr mit Compilereinstellung und (Library-)code zu tun, als mit der Hardware.
Beim Teensy ist der Compiler z.B. so eingestellt, dass er Fliesskommakonstanten im Code immer als float interpretiert, eventuell führt das zu vielen überflüssigen Umwandlungen zwischen float und double.
Ansonsten sind die Ergebnisse so wie ich vermutet habe. Der Teensy 3.2 dürfte irgendwo in der Mitte zwischen Arduino Due und Teensy 3.5 liegen.
Das ist als Optimierung gedacht für solche Fälle
Hier wird bei x * 2.1 zuerst das x von float nach double gewandelt, dann als double multipliziert und dann das Ergebnis wieder in float konvertiert.Code:float x = 3.5f; float y = x * 2.1; // f vergessen
Weil aber in typischem Arduino Code float und double häufig gemischt verwendet wird, weils auf den 8-Bittern eh das selbe ist, ist beim Teensy standardmäßig der Compilerschalter -fsingle-precision-constant gesetzt, der dazu führt, dass Fliesskommakonstanten als float interpretiert werden. Das macht den Code normalerweise schneller, weil man meist eh nur mit float rechnen will.
Wenn man explizit eine double Konstante braucht, kann man ja 2.1L schreiben, das ist dann zwar long double, aber das dürfte bei den kleinen Prozessoren auch double sein.
Ich bin mir nicht sicher, wie das die anderen getesteten Boards handhaben, muss man also die Dateien in der Arduino IDE erforschen ...
Ein weiterer Unterschied sind die Compilereinstellungen zur Optimierung. Ich bin mir ziemlich sicher die Arduino IDE optimiert beim Due den Code auf Größe, nicht auf Geschwindigkeit. Beim Teensy lässt sich das im Menu der Arduino IDE einstellen ...
aaa-ha...!
was macht er dann bei sin, cos, exp, sqrt? grundsätzlich doch double, wie es richtig wäre, oder "nur" float per XXXXf Funktionen?
Arduino M0 und M3 verwenden dann double, für float muss man die XXXXf Versionen nutzen (habe ich getestet), und so würde ich es auch an sich immer erwarten, nach allem was ich jetzt weiß.
(PS, nach den Laufzeiten zu urteilen, scheint der M4 ja IMMER für double länger zu brauchen, daher dann wohl wschl doch double, wie zu erwarten, wenn auch ohne Nutzung der fpu wie es scheint...)
Lesezeichen