国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

為什么 Math.min() 比 Math.max() 大?(續)

xiguadada / 3081人閱讀

摘要:本來以為是無參調用時返回了運算的幺元,后來細琢磨,好像沒有什么關系,對于運算集合上的二元運算,如果滿足,則是運算的幺元。乘法運算的幺元是,因為。但是我們定義函數或者函數,如果不傳遞參數時,返回幺元的話也是不合理的。

昨天心血來潮寫了一篇文章:為什么Math.min() 比 Math.max() 大?

為什么很多人會有這種疑惑,是因為犯了想當然的錯誤——望文生義。Math.min() 作為一個函數,返回的并不是最小值;同理 Math.max() 返回的也不是最大值。他們返回的是參數的最大值和最小值,而我們卻沒有傳遞任何參數。

javascript 中數值的最大值和最小值常量分別是 Number.MAX_VALUENumber.MIN_VALUE,在我電腦 V8 的運行結果是 1.7976931348623157e+3085e-324

這里也有一個坑,那就是 MIN_VALUE 并不是最小的數,而是絕對值最小的數,它是一個正數。而 Math.min() 的返回值比 Number.MAX_VALUE 還要大。

Math.min() 返回了 Infinity,這個值對應了 Number.POSITIVE_INFINITY 常量。Math.max() 返回了 -Infinity,這個值對應了 Number.NEGATIVE_INFINITY 常量。

就像數學里面那樣,正無窮和負無窮并不是確切的數,只是集合里面的概念。我們可以使用 0 減去正無窮來得到負無窮:0 - Infinity = -Infinity,或者通過 0 減去負無窮來得到正無窮:0 - (-Infinity) = Infinity。但是我們把正無窮和負無窮相加卻得不到 0,事實上我們得到的是 NaN。

當我們真正明白了 Math.min 和 Math.max 只是返回了所有參數的最大值,就很容易理解這個看似匪夷所思的結果了。

本來想查看 V8 的源碼,但是搜索了一圈,也只找到了幾個測試用例(文件: test/mjsunit/math-min-max.js):

assertEquals(Infinity, Math.min()); 
assertEquals(1, Math.min(1)); 
assertEquals(1, Math.min(1, 2)); 
assertEquals(1, Math.min(2, 1)); 
assertEquals(1, Math.min(1, 2, 3)); 
assertEquals(1, Math.min(3, 2, 1)); 
assertEquals(1, Math.min(2, 3, 1)); 

從此測試用例中可以看出,Math.min() 確實返回了 Infinity。繼續閱讀此測試用例還會發現更有意思的事:

assertEquals(-Infinity, Infinity / Math.min(-0, +0)); 
assertEquals(-Infinity, Infinity / Math.min(+0, -0)); 
assertEquals(-Infinity, Infinity / Math.min(+0, -0, 1)); 

對比下面的結果:

assertEquals(Infinity, Infinity / Math.max(-0, +0)); 
assertEquals(Infinity, Infinity / Math.max(+0, -0)); 
assertEquals(Infinity, Infinity / Math.max(+0, -0, -1));

也就是說在 Math.minMath.max 進行數值比較(javascript不分整型和浮點型)時,負零是小于正零的。

-0、+0、-Infinity、+Infinity、NaN 這幾個概念就可以講上一天一夜了,篇幅有限就不展開講了,以后有時間再填坑。

言歸正傳,現在我們換個思路,試著從算法的角度去考慮最大值和最小值的問題。

我們如何求 N 個參數的最大值呢?為了描述簡單我們使用數組(感謝 @f2er前端百科)

var max = ___;
arr.forEach(function(n) { 
    if(n > max) { 
        max = n; 
    }
});

如果是填空題,你會在空格處填什么呢?如此想來,這個返回值就很合理了。

本來以為是無參調用時返回了運算的幺元,后來細琢磨,好像沒有什么關系,2333

對于運算集合 S 上的二元運算,如果滿足 ax = xa = x,則 a 是運算的幺元。加法運算的幺元是 0,因為 0+x = x+0 = x。乘法運算的幺元是 1,因為 1x = x1 = x。但是我們定義函數 add() 或者 mult() 函數,如果不傳遞參數時,返回幺元的話也是不合理的。

完。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80390.html

相關文章

  • Math.min() 什么 Math.max()

    摘要:考慮如下代碼按照常規思路,這段代碼應該輸出,畢竟最小值應該小于最大值。為什么會這樣呢還得去查查的相關文檔。是什么呢是中全局對象的一個屬性,在瀏覽器環境中就是對象的一個屬性,表示無窮大。繼續閱讀為什么比大續 考慮如下代碼: var min = Math.min(); var max = Math.max(); console.log(min < max); 按照常規思路,這段代碼應該輸出...

    hyuan 評論0 收藏0
  • 164. Maximum Gap

    摘要:這個的長度是最小可能的最大差值。注意考慮和兩個邊界值也要加進去。 題目:Given an unsorted array, find the maximum difference between the successive elements in its sorted form. Try to solve it in linear time/space. Return 0 if the...

    EddieChan 評論0 收藏0
  • 怪異的JavaScript系列(三)

    摘要:本文的思想源自于在上的演講。我收集這些例子的主要目的是將它們整理并清楚理解它們的原理。著主要是因為大括號也是函數定義語法的一部分。自從年雙十一正式上線,累計處理了億錯誤事件,得到了金山軟件等眾多知名用戶的認可。 譯者按: JavaScript有很多坑,經常一不小心就要寫bug。 原文: What the f*ck JavaScript? 譯者: Fundebug 為了保證可讀性...

    XboxYan 評論0 收藏0
  • JavaScript數據結構與算法-Sort-(leetcode原題)

    摘要:說明你可以假設數組中所有元素都是非負整數,且數值在位有符號整數范圍內。提示按奇偶排序數組給定一個非負整數數組,中一半整數是奇數,一半整數是偶數。對數組進行排序,以便當為奇數時,也是奇數當為偶數時,也是偶數。 原博客地址:https://finget.github.io/2019... 排序 showImg(https://segmentfault.com/img/remote/146...

    Hanks10100 評論0 收藏0
  • JavaScript中8個常見的陷阱

    摘要:然而,不會在年的基礎上加,而只是表示年。閉包這是一個經典的面試題雖然期望輸出,然而實際上卻不會。因為第行的沒有在正確的環境下執行。 譯者按: 漫漫編程路,總有一些坑讓你淚流滿面。 原文: Who said javascript was easy ? 譯者: Fundebug 為了保證可讀性,本文采用意譯而非直譯。另外,本文版權歸原作者所有,翻譯僅用于學習。 這里我們針對JavaScri...

    doodlewind 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<