Der UNO ist kein ausgesprochen guter Rechenknecht. Ich würde bei dem so weit es geht mit ganzen Zahlen rechnen und nur bei der Anzeige Fließkomma nutzen.
ESP32 mit float und Serial.println(ergebnis,2);
original 1.437554597855
ganzzahl * 100 143.000000000000
ergebnis 1.43
Winkel * 100 - offset*100 ohne den ganzen Schnodder drum rum wird dein Zwischenergebnis, welches Du dann weite rverwendest.
Ggfls. kannst auch mit 1000 rechnen. Dann aber muss die Variable zur Sicherheit uint32 werden.
Zur Ungenauigkeit bei Fließkommazahlen: nicht alle Base2 lassen sich bruchfrei in Base10 umwandeln - da gab's in früheren Jahren (als Matheunterricht noch brauchbar war) lange Erklärungen + Übungen in der Schule.
Anmerkungen und Warnungen habe ich gelesen, meiner Meinung nach hab ich auch kein Problem in der Darstellung von Gleitkommazahlen .
Ich komme so nicht weiter und werde in Ruhe einen anderen Weg suchen.
Das kann jeder uC, ob 8bit oder nicht. Du brauchst halt dann double statt float und die passenden Libraries (sofern dein Compiler das nicht hinbekommt). Oder du nimmst eine lib für beliebig präzise Fließkommazahlen.
ich kann kein Silbertablett sehen. Ich brauche auch keine 12 Nachkommastellen, im Gegenteil, ich möchte das Zwischenergebnis auf 2 Stellen nach dem Komma begrenzen (nicht in der Anzeige)
eine lib für beliebig präzise Fließkommazahlen.?? wieso brauch ich einen "implementing 64-bit floating point arithmetic" lib um 1.43 duch 100 zu dividieren ? ist die Rechnung denn so exotisch??
Wie schon oben geschrieben, Flie0kommazahlen mit Base 10 sind nicht deckungsgleich mit Fließkommazahlen zur Basis 2. Warum das so ist solltest du in der Schule gelernt haben (Kapitel über Brüche und Bruchdarstellungen)
Meine schulische Laufbahn sei mal dahingestellt, da weisst du wahrscheinlich mehr als ich, aber was deine Brüche jetzt mit unterschiedlichen Zahlensystemen zu tun hat bleibt mir schleierhaft.
Deiner für mich nicht nachvollziehbaren Erklärung nach sollte ja dann folgendes auch nicht funktionieren:
float a=225;
float b;
void setup()
{
Serial.begin(115200);
b=a/10;
Serial.print("b= ");
Serial.println(b,12);
}
void loop() {
// put your main code here, to run repeatedly:
}
Ergebnis
15:53:14.633 -> b= 22.500000000000
Gruß Stefan