Ich lerne gerade etwas über Compilerkonstruktion und Sprachdesign und denke darüber nach, welche nativen Datentypen ich in meiner Sprache unterstützen möchte. Jetzt gibt es eine ganze Reihe von Sprachen, die zwischen ganzzahligen und reellen Zahlen unterscheiden. Ich erinnere mich jedoch an einen Vortrag von Douglas Crockford, in dem er sagte:
Wenn Sie einen einzelnen Nummerntyp im System haben, können Sie keinen Fehler machen, indem Sie den falschen Nummerntyp auswählen
Er erwähnte auch, dass er eine andere Zahlendarstellung als die häufig verwendete IEEE-754 empfiehlt (bitte korrigieren Sie mich, wenn ich falsch liege), und zwar als DEC64. Daher meine Frage: Welche Zahlendarstellung sollte ich für eine Allzwecksprache mit primär pädagogischem Schwerpunkt verwenden?
EDIT: Mit pädagogischem Fokus spreche ich über meine eigenen Fortschritte beim Erlernen von Compilern, nicht um andere zu erziehen.
quelle
Antworten:
Wir haben im Allgemeinen unterschiedliche Zahlendarstellungen, weil sie unterschiedliche Stärken und Schwächen haben, sei es Geschwindigkeit, Präzision oder Reichweite. Dies muss auch der Fall sein, weil wir nicht alle reellen Zahlen mit endlichem Speicher darstellen können. Wir müssen immer einige auswählen, die wir nicht genau darstellen können.
Das Zitat von Doug Crockford, das Sie haben, ist grenzwertig idiotisch. Wenn Sie dann nur eine Darstellung auswählen können, können Sie nicht die falsche, aber auch nicht die richtige auswählen. Das heißt, Ihre einzige Wahl funktioniert für einige Zwecke, aber nicht für alle.
Es ist wahr, dass einige Darstellungen wahrscheinlich besser sind, da die erste Wahl von DEC64 hier vernünftig aussieht. Da es sich um eine dezimale Gleitkommadarstellung handelt, ist dies in den meisten Situationen weniger überraschend als IEEE-754 (binäres Gleitkomma), da die Leute dazu neigen, dezimal zu denken, z. B. kann es genau 0,3 darstellen. Unter bestimmten Umständen treten immer noch Repräsentationsprobleme auf, z. B. das Hinzufügen von wirklich großen und wirklich kleinen Zahlen
Für die weitere Lektüre würde ich Richard Harris 'Artikelserie vorschlagen,' warum X Sie nicht dazu bringt, Floting Point Blues zu reparieren '
quelle
Für eine allgemeine Sprache sollten sich Zahlen wie im Mathematikunterricht verhalten. Nur spezielle Sprachen, wie die für Gerätetreiber, sollten über spezielle Mathematik verfügen.
Ich würde empfehlen, Zahlen mit beliebiger Genauigkeit anstelle von Zahlen mit fester Genauigkeit zu verwenden. Ja, sie sind langsamer, aber sie verhalten sich so, wie die Leute erwarten, dass sich Zahlen verhalten. Das Setzen künstlicher Grenzen wird als Fehler gemeldet.
quelle