首頁>Club>
計算機相關原理,還是數學定理?
6
回覆列表
  • 1 # 碼農半生仍少年

    或許題主對isFinite的含義有所誤解吧。

    這裡的有窮數,並非數學上的有窮數(或許翻譯做有限數更合理),僅僅是相對於正無窮(∞,Infinity)和負無窮(-∞,-Infinity)而言,所做的事情無非是檢查輸入是否為數值(isNaN),並且位於浮點數的表示範圍內,即以下區間:

    [-Number.MAX_VALUE , Number.MAX_VALUE]

    其中,Number.MAX_VALUE ≈ 1.79E+308。

    大於Number.MAX_VALUE就認為是Infinity,小於-Number.MAX_VALUE就是–Infinity。

    計算機儲存浮點數的方式,不能表達數學上的無窮數。

    因此,JavaScript中isFinite的實現可以簡單表示為:

    function isFinite(value) {

    const numeric = Number(value);

    return (!Number.isNaN(numeric)) && numeric >= -Number.MAX_VALUE && numeric <= Number.MAX_VALUE;

    }

    以上是全域性函式。Number.isFinite的實現也類似,省去了型別轉換,透過借用全域性isFinite甚至更簡單,如下:

    Number.isFinite = (value) {

    return typeof(value) === "number" && isFinite(value);

    }

    補充:以下是早期V8中的一個全域性isFinite的JS實現(最新的版本中已被替換為C++),原理相似,但更最佳化。

  • 中秋節和大豐收的關聯?
  • 瑞虎5x怎麼樣,在高速狀態下遇到橫風會不會覺得飄?