2010-10-31 11 views
6

È possibile emulare in qualche modo il float di precisione singola in Javascript? Secondo il blog di Doug Crockford "Number is 64-bit floating point", ma devo usare uno solo per il porting dell'algoritmo C++ che calcola l'errore float di precisione singola.Emulazione float di precisione singola in Javascript (float32)

+0

Due osservazioni: (1) L'ultima parola dovrebbe essere "errore", non è "errore". "errore" è un termine tecnico nel trattare con calcoli in virgola mobile. (2) Puoi dare qualche contesto per il motivo per cui hai bisogno dell'errore in un calcolo a virgola mobile? Può darsi che ci siano altri modi per raggiungere il tuo obiettivo finale senza emulare la precisione singola in javascript. –

risposta

4

Lo standard ES6 ha Math.fround() che converte un float64 in float32 e quindi di nuovo indietro, arrotondando efficacemente il float alla precisione float32. Vedi this article per i dettagli.

-1

Prova questa funzione JavaScript. Utilizza .toFixed (6) per arrotondare il numero a sei cifre decimali.

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]; 
} 
Problemi correlati