2010-10-31 5 views
6

Ist es möglich, Floating mit einfacher Genauigkeit in Javascript zu emulieren? Laut Doug Crockford's Blog "Nummer ist 64-Bit-Gleitkommazahl", aber ich muss nur einen für die Portierung des C++ - Algorithmus verwenden, der den Float-Fehler mit einfacher Genauigkeit berechnet.Einzelpräzisions-Float-Emulation in Javascript (float32)

+0

Zwei Kommentare: (1) Das letzte Wort sollte "Fehler" sein, nicht "Fehler". "Fehler" ist ein technischer Begriff im Umgang mit Gleitkommaberechnungen. (2) Können Sie einen Kontext angeben, warum Sie den Fehler in einer Gleitkommaberechnung benötigen? Es kann sein, dass es andere Möglichkeiten gibt, Ihr ultimatives Ziel zu erreichen, ohne eine einzelne Genauigkeit in Javascript zu emulieren. –

Antwort

4

Der ES6-Standard verfügt über Math.fround(), das float64 in float32 und dann wieder zurück konvertiert, wodurch der float-Wert praktisch auf float32-Genauigkeit gerundet wird. Details finden Sie unter this article.

-1

Versuchen Sie diese JavaScript-Funktion. Es verwendet .toFixed (6), um die Zahl auf sechs Dezimalstellen abzurunden.

function ToSingle(s) { 
s = s.toString().toUpperCase(); 
if (s.indexOf("E") == -1) s = parseFloat(s).toExponential().toUpperCase(); 
if (s.indexOf("E") == -1) return s 

var o = s.split("E"); 
var s1 = o[0]; 

if (s1.indexOf(".") == -1) return s 
if (s1.split(".")[1].length < 7) return s; 

var num = parseFloat(s1); 
if (num + "" == "NaN") return s; 

return num.toFixed(6) + "E" + o[1]; 
}