Wozu eigentlich float



  • Ja, der Titel sagt eigentlich alles. Wenn man die 32 bit in ein 24 bit Integer und ein 8 bit "shifter" aufteilen würde, hätte man doch auch 7 Stellen Genauigkeit, und die 127 möglichen Nullen dahinter dürften wohl auch reichen. Und der Vorteil: Solange man nicht sehr kleine und sehr große Zahlen addiert, wäre das wie bei Integern ganz genau. Wo ist der Fehler?



  • Gegenfrage:

    Wozu int, wenns doch long long gibt?
    Oder wozu std::string, wenns doch char* gibt?

    Der Einfachheit halber! Mehr nicht!



  • @floater
    Lies doch mal nach, wie float funktioniert - ich glaube, das wird dir bekannt vorkommen...


  • Mod

    Die erinnerung schrieb:

    Der Einfachheit halber! Mehr nicht!

    Nein, des Speicherplatzes wegen. Und teilweise auch wegen der Geschwindigkeit (das ist dann aber stark maschinenabhängig).



  • Warum gibts Autos, wenn man doch laufen kann???



  • Das Ding ist halt, dass float exakt so funktioniert, wie vom Threadstarter im "Gegenvorschlag" beschrieben.



  • Die erinnerung schrieb:

    Der Einfachheit halber!

    Es ist halt schon als datentyp fertig programmiert.
    Oder hättet ihr lust etwa euren eigenen float zu programmieren???



  • @Die erinnerung
    Du raffst ja gar nichts.^^

    @Caligulaminus, @SeppJ, @otze: Ich glaube die Idee des TE hat schon noch einen* Unterschied. Und zwar:

    Solange man nicht sehr kleine und sehr große Zahlen addiert, wäre das wie bei Integern ganz genau. Wo ist der Fehler?

    Das wäre der Fall, wenn float zur Basis 10 gerechnet würde. Es wird aber zur Basis 2 gerechnet (wahrscheinlich aus Performancegründen). Und 0.1 kann in binär halt nicht so gut ( = gar nicht) darstellen. So wie man 1/3 im Dezimalsystem nicht darstellen kann, aber im 3er System wäre es einfach 0.1.

    Siehe auch
    http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary
    http://en.wikipedia.org/wiki/IEEE_754
    http://www.h-schmidt.net/FloatConverter/IEEE754de.html

    Was allerdings interessant ist: Warum nimmt man nicht 10 als Basis? Wird doch eh in der Hardware gerechnet. Braucht man da mehr Leiter für?

    * Genau genommen mehrere. float hat auch noch Vorzeichen, NaN, Inf.



  • Solange man nicht sehr kleine und sehr große Zahlen addiert, wäre das wie bei Integern ganz genau.

    Janz jenau so wie im IEEE-754...

    * Genau genommen mehrere. float hat auch noch Vorzeichen, NaN, Inf.

    Wenn Du Haare spalten willst, ja. Allerdings hat IEEE-754 gegenüber dem sehr verkürzten Vorschlag von floater doch praktisch nur Vorteile.

    Und beim Wechsel des Darstellungssystems handle ich mir die Fehler nur woanders ein, wie Du ja selber schreibst. Diskret kann ich eben nicht alle reellen Zahlen darstellen, isso.

    Wird doch eh in der Hardware gerechnet.

    In binär arbeitender Hardware(zumindest unter meinem Schreibtisch). Andere Systeme zu verwenden ist nur Mehrarbeit ohne jeden Zugewinn(siehe die von dir angemerkten Ungenauigkeiten/Nichtdarstellbarkeiten).



  • Caligulaminus schrieb:

    Andere Systeme zu verwenden ist nur Mehrarbeit ohne jeden Zugewinn

    Zugewinn wäre das schon. Da unsere Zahlenliterale üblicherweise im Dezimalsystem vorliegen, könnte man diese Zahlen absolut darstellen.



  • Das wäre nur ein Scheinvorteil.
    - Meine Zahlenliterale sind oft genug hexadezimal
    - Die Zehnerdarstellung hat ja genauso ihre Lücken/Grenzen (Pest<->Cholera)

    Das (effizienzmäßig) sinnvollste ist es, sich an die Vorgaben der Hardware zu halten. Und da wir ja universelle Rechenmaschinen wollen, tun wir eben genau das.

    Und wenn wir wirklich mal was spezielles brauchen, dann benutzen wir eben etwas spezielles(BCD, GMP, CLN...)

    ~Edit: Das mit dem hex muß ich wohl revidieren, wir reden ja über Gleitkomma. 🙄 Reelle Zahlen habe ich dann doch eher selten in hex. Zeit für's Bett...~


Anmelden zum Antworten