[Python] [微進階]數學運算的反直覺結果

[Python] [微進階]數學運算的反直覺結果

更新於 發佈於 閱讀時間約 3 分鐘

有時候在使用數學運算時,會出現一些看似反直覺的結果。

這些錯誤可能是由於我們對於數學規則的誤解或者忽略了一些細節所導致的。

以下是一些 Python 的例子:

除餘數

例如負數求餘數。

假設-15 % 90 狀況下 會下意思覺得結果還是 -15 但輸出的結果是 75。

result = -15 % 90
print(result) # 輸出為 75

Python(以及許多其他程式語言)會遵循一個標準的餘數計算規則。這個規則確保餘數的結果始終是非負的。

舉例來說,對於 -15 除以 90 這個例子:

  1. 首先,Python將 -15 加上 90 的倍數,直到結果變為非負。在這個例子中,-15 減去 90 的倍數後,結果是 -15 + 90 = 75。
  2. 因為 75 是一個非負數,所以餘數就是 75。

這個計算過程確保了餘數的結果始終是非負的,從而符合了我們對於餘數的一般期望。

整數除法:

result = 5 / 2
print(result) # 2.5

直覺上我們可能會認為 5 / 2 的結果應該是 2.5,但在 Python 2.x 中,當兩個整數相除時,結果是取其商,因此這個結果會是 2

在 Python 3.x 中,則會得到 2.5

浮點數比較:

a = 0.1 + 0.2
b = 0.3
print(a == b) # False

在這個例子中,a 的值會是接近 0.3 但不完全相等。這是因為浮點數的精度問題,0.1 和 0.2 的二進位表示並不能精確地加總成 0.3。

整數溢位:

max_int = 2**31 - 1  # 最大的 32 位元有號整數
overflow = max_int + 1
print(overflow) # -2147483648

這個例子展示了整數溢位的情況,當一個整數超過了其數值範圍時,會回到最小的可能值。

對浮點數取餘數:

result = 1.1 % 0.1
print(result) # 2.7755575615628914e-17

這個結果看似奇怪,因為我們期望的可能是 0.1。但浮點數運算的精度問題導致了這種結果。


這些都是一些常見的反直覺的數學運算錯誤的例子。在處理數學計算時,我們應該時刻注意到這些細節,以避免出現意外的結果。

avatar-img
螃蟹_crab的沙龍
137會員
243內容數
本業是影像辨識軟體開發,閒暇時間進修AI相關內容,將學習到的內容寫成文章分享。
留言
avatar-img
留言分享你的想法!
螃蟹_crab的沙龍 的其他內容
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
當你需要在 Python 中執行多個任務,但又不希望它們相互阻塞時,可以使用 threading 模組。 threading 模組允許你在單個程序中創建多個執行緒,這些執行緒可以同時運行,從而實現並行執行多個任務的效果。
在這篇文章中,我們講述瞭如何使用numpy.where方法查找Numpy數組中值的索引。除了介紹了numpy.where的基本用法外,還舉了一些應用實例進行了詳細說明。文章最後提供了其他應用領域以及相關參考文獻。
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
NumPy 提供了一種 N 維數組類型 ndarray(N-dimensional array) ,它描述了相同類型的「數據類型」的集合。 多維數組: ndarray 是一個 N 維數組,其中 N 可以是任意整數。一維數組是向量,二維數組是矩陣
NumPy在圖像處理、機器學習、數學和統計學等領域中被廣泛應用。 以下是一些常見的應用場景: 數據處理和分析: NumPy提供了高效的多維數組(nd array)和相應的操作函數,使得對大型數據集進行快速、有效的操作變得容易。
在Python中,queue是一個非常有用的模块。 它提供了多種佇列(queue)實現,用於在多線程環境中安全地交換信息或者數據。 佇列(queue)是一種先進先出(FIFO)的數據結構,允許在佇列的一端插入元素,另一端取出元素。(FIFO 是First In, First Out 的縮寫)
當你需要在 Python 中執行多個任務,但又不希望它們相互阻塞時,可以使用 threading 模組。 threading 模組允許你在單個程序中創建多個執行緒,這些執行緒可以同時運行,從而實現並行執行多個任務的效果。
在這篇文章中,我們講述瞭如何使用numpy.where方法查找Numpy數組中值的索引。除了介紹了numpy.where的基本用法外,還舉了一些應用實例進行了詳細說明。文章最後提供了其他應用領域以及相關參考文獻。
f字符串(f-string)在Python 3.6版本引入了新特性,可以更方便地格式化字符串。本文介紹了f-string的基本使用方法,以及表達式、運算符、格式化控制、字典和列表的應用,以及調用方法和函數等。f-string提供了一種更靈活的方式,使你能夠控制字符串的外觀,以滿足不同情況下的需求。
NumPy 提供了一種 N 維數組類型 ndarray(N-dimensional array) ,它描述了相同類型的「數據類型」的集合。 多維數組: ndarray 是一個 N 維數組,其中 N 可以是任意整數。一維數組是向量,二維數組是矩陣
NumPy在圖像處理、機器學習、數學和統計學等領域中被廣泛應用。 以下是一些常見的應用場景: 數據處理和分析: NumPy提供了高效的多維數組(nd array)和相應的操作函數,使得對大型數據集進行快速、有效的操作變得容易。