EinführungErhalten nächste kleinste nächste Zahl in eine Dezimalzahl
Für einige Berechnungen Ich brauche eine möglichst kleine Zahl zu finden, den ich von einer bestimmten Anzahl addieren/subtrahieren ohne JavaScript in Schwierigkeiten mit dem internen verwendeten Datentyp zu bekommen.
Tor
Ich habe versucht, eine Funktion zu schreiben, die die nächste nächste Nummer VALUE in Richtung Wert DIR zurückkehren kann.
function nextNearest(value, direction) {
// Special cases for value==0 or value==direction removed
if (direction < value) {
return value - Number.MIN_VALUE;
} else {
return value + Number.MIN_VALUE;
}
}
Das Problem dabei ist, dass JavaScript einen 64-Bit-Float-Typen verwendet (glaube ich), die unterschiedlichen Mindestschrittgrößen abhängig von seinem aktuellen Exponenten hat.
Problem im Detail
Das Problem ist die Größe Schritt auf seinem aktuellen Exponenten abhängig:
var a = Number.MIN_VALUE;
console.log(a);
// 5e-324
console.log(a + Number.MIN_VALUE);
// 1e-323 (changed, as expected)
var a = Number.MAX_VALUE;
console.log(a);
// 1.7976931348623157e+308
console.log(a - Number.MIN_VALUE);
// 1.7976931348623157e+308 (that's wrong)
console.log(a - Number.MIN_VALUE == a);
// true (which also is wrong)
Zusammenfassung
So wie kann ich die kleinstmögliche Zahl finde ich kann Addieren/Subtrahieren von einem Wert, der in einem Parameter in einer beliebigen Richtung angegeben ist? In C++ wäre dies leicht durch Zugriff auf die Zahlen Binärwerte möglich.
Sie Vorteil von [typisierte Arrays] nehmen können (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays) am niedrig- zu bekommen Ebenendarstellung von Fließkommawerten in JavaScript. Erstellen Sie ein 1-Element-Float64Array- und ein 8-Element-UInt8-Array über denselben Puffer. – Pointy