對於某些計算,我需要找到儘可能小的號碼,我可以從指定數量的加/減沒有JavaScript越來越麻煩與內部使用的數據類型。
目標
我試圖寫的函數,其能夠到下一個最接近的數字返回值的價值DIR的方向。
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;
}
}
問題與此是,JavaScript使用根據其當前指數,其具有不同的最小步長64位浮點類型(我想)。
詳細
問題問題是步長取決於其當前指數:
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)
摘要
所以,我怎麼能找到最小的數,我可以從任何方向的參數中指定的值加/減?在C++中,通過訪問數字二進制值很容易實現。
您可以利用的[類型數組(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays)來獲得在低JavaScript中浮點值的高級表示。在同一個緩衝區上創建一個1元素的Float64Array和一個8元素的UInt8數組。 – Pointy