Nie gesehen, sorry.
Ich kann mir auch kaum vorstellen, daß es für irgendwas sinnvoll ist mit
nicht mal dreieinhalb Stellen Genauigkeit und einem Wertebereich, den
man auch leicht mit ganzen Zahlen erreicht.
Das soll wohl gelegentlich im Grafikbereich verwendet werden, aber da
kommt man mit einem AVR auch nicht weit.
Sicher, daß Festkommazahlen nicht interessanter sind?
Klaus W. schrieb:> Ich kann mir auch kaum vorstellen, daß es für irgendwas sinnvoll ist mit> nicht mal dreieinhalb Stellen Genauigkeit und einem Wertebereich, den> man auch leicht mit ganzen Zahlen erreicht.
Der TO interessiert sich ja auch nur dafür. Von irgend einer sinnvollen
Anwendung stand da nichts.
Abgesehen davon: Float-Formate aller Art haben in Verbindung mit dem
Wunsch nach einer Art MAC-Operation eigentlich nur einen Sinn, wenn sie
in Hardware und dabei effektiv nur in einem Takt berechenbar sind. So
etwas ist definitiv bei einem AVR nicht der Fall.
W.S.
Klaus W. schrieb:> Ich kann mir auch kaum vorstellen, daß es für irgendwas sinnvoll ist mit> nicht mal dreieinhalb Stellen Genauigkeit und einem Wertebereich, den> man auch leicht mit ganzen Zahlen erreicht.
Bei float hast du immer die gleiche Anzahl gültiger Stellen, bei ganzen
Zahlen nicht. Für Rechenoperationen mit Multiplikationen daher sehr gut
vorstellbar.
Wolfgang schrieb:> Bei float hast du immer die gleiche Anzahl gültiger Stellen, bei ganzen> Zahlen nicht. Für Rechenoperationen mit Multiplikationen daher sehr gut> vorstellbar.
Das ist mir schon klar.
In der Theorie ein echter Vorteil. Bei float16_t ist aber (wenn ich mich
nicht täusche) der Exponent 5 Bits lang. Dann kommt man von
Zehntausendstel bis gerade mal um die 65000 als Wertebereich. Das kann
man mit Festkomma auch leicht haben, und hat viel weniger Rechenaufwand,
gerade bei einem AVR sucht man eher keine Rechenzeitfresser.
Gleitkomma lohnt doch erst, wenn man wirklich einen größeren Bereich
braucht und sich dabei nur eine begrenzte Anzahl Stellen für die
Genauigkeit gönnen will.
W.S. schrieb:> Der TO interessiert sich ja auch nur dafür. Von irgend einer sinnvollen> Anwendung stand da nichts.
Stimmt, Spielen reicht als Motivation. Dagegen sage ich nichts.
Wollte nur erwähnen, daß der praktische Nutzen wahrscheinlich limitiert
ist.
Der Tradeoff liegt zwischen Anzahl Stellen, und Wertebereich. Nehmen
wird 2 Stellen, sind das 7 bit mantisse plus vorzeichen, also 8 bit.
Dann waeren 8 Bit uebrig fuer den Exponenten, auch 7 bit plus
Vorzeichen. Also bis 128 nach links oder rechts schieben. Das ist doch
sehr ueppig.
Weniger Werteberich waere auch passend. Nehmen wir 30 Shifts nach rechts
und links, da wuerden 5 bits Exponent reichen, und wuerden 10 Bit
Mantisse lassen. Das waeren dann 3 Stellen.
Wenn Du es Dir einfach, aber dafür nicht ganz so schnell machen willst:
Nimm bfloat16, das ist der normale float mit verkürzter Mantisse. Du
speicherst einfach die unteren zwei Byte der Mantisse nicht. Beim laden
"bläst" Du das auf und nimmst dann die float-Operationen .
chris_ schrieb:> Ich nehme mal an, es gibt einige ARMs, die das Format in ihren> Recheneinheiten unterstützen.
Ich erinnere mich daran gelesen zu haben, dass dem nicht so und dass der
Nutzen von half precision float deswegen sehr begrenzt sei. Ich kenne
die Quelle nicht mehr. Wahrscheinlich war es eines der Bücher von Joseph
Yiu.
Klaus W. schrieb:> Dann kommt man von Zehntausendstel bis gerade mal um die 65000 als> Wertebereich. Das kann man mit Festkomma auch leicht haben,
Allerdings nicht mit nur 16 Bit.
> und hat viel weniger Rechenaufwand, gerade bei einem AVR sucht man eher> keine Rechenzeitfresser.
Man sucht aber auch keine Speicherfresser.
Klaus W. schrieb:> Wollte nur erwähnen, daß der praktische Nutzen wahrscheinlich limitiert> ist.
Wie schon gesagt wurde, Bildverarbeitung z.B. auf einem FPGA. Ansonsten
ist das Quatsch, insbesondere auf einem AVR.
Peter D. schrieb:> Klaus W. schrieb:>> Wollte nur erwähnen, daß der praktische Nutzen wahrscheinlich limitiert>> ist.>> Wie schon gesagt wurde, Bildverarbeitung z.B. auf einem FPGA. Ansonsten> ist das Quatsch, insbesondere auf einem AVR.
Es wird wohl hauptsächlich für neuronale Netze eingesetzt. Direkte
Hardwareunterstützung gibts es meines Wissens nur in neueren GPUs, dort
dann aber mit bis zu 400 TFlop/s (NVidia A100), und einigen FPGAs (z.B.
Intel Arria 10). X86 können nicht direkt damit rechnen aber es gibt
Assemblerbefehle um Half-Floats als Speicherformat zu verwenden.