因此,昨天,雖然通過一些F#代碼作爲編碼練習的一部分,另一位開發人員指出了一些有趣的事情。我們只是做了一小段代碼來演示彙總列表。如果我做的:如何獲取列表減少拋出算術溢出
[1..100000] |> Seq.sum
我收到以下錯誤:
System.OverflowException: Arithmetic operation resulted in an overflow.
at <StartupCode$FSI_0003>[email protected]()
Stopped due to error
但是,如果我這樣做:
[1..100000] |> List.reduce (+)
我得到:
val it : int = 705082704
我意識到雖然這兩段代碼應該完成相同的p要求他們非常不同。我只是好奇,有沒有辦法讓List.reduce拋出OverflowException而不是給我一個不好的答案?
只是對現有答案的補充:總和'1..100000 =(100001 * 100000)/ 2 = 50000 50000 = 0x12A06B550'這是一個溢出。丟棄溢出位:「0x12A06B550 - 0x100000000 = 0x2A06B550 = 705082704」。 – bytebuster