lua數學計算的inf和nan

2021-09-28 17:41:26 字數 993 閱讀 7515

今天,我來講述乙個lua關於對數學世界的恐懼之一,極大值和極小值。[inf] [nan]在某次偶然的log除錯裡,我注意到控制台輸出了這麼兩個以前沒有見過的東西。雖然我的程式**裡只有非常簡單的數學計算,還是出現這樣高階(未知)的東西。對數學的敬畏由此展開......

這個知識點很簡單,也許是初中或者小學時代的數學裡有提及過;分子/分母的關係,簡單的除法計算方式,問題也從這兒開始延展...

以下是lua指令碼:

local result = numcounts / numneed

print("result:"..result)

想這樣簡單**裡蘊含的數學問題,乙個簡單的除法計算會導致一些讓人震驚的bug,numneed 是乙個極小的數字,也學就是0。這個時候觸發了這個很有意思的bug 得出的結果是 [inf] 出了這個bug之後,我求助於網友得出的結果是【乙個極大的數值】可能已經超出了我們所有人預期。本著格物致知的原則,我確認了一下 inf的意思是infimum,另外一種更為坑爹的情況得出的結果是[nan],事後某位同學給我解答了一下,這個代表極小值...,事後我確認了一下,這個的實際意思因該是[no a number的縮寫]。

討論回到數學課堂,這樣的**看似沒有任何問題,但是,在數學的角度來說,除法計算裡分母是絕對不能等於0的。從嚴謹的程式角度來思考這個問題,分子、分母是都不可以為0的,如果過小也會導致bug。這似乎跟程式一點兒關係都沒有,但是也會導致程式的bug。延伸的說,簡單的除法會導致這樣的問題,如果是稍微複雜一點兒的計算公式,分子分母不能為0的情況必須加適當的攔截條件去過濾(同樣接受九年義務教育的你也許不會犯這樣的數學錯誤,不過配置表的作者就很難說了)。

在每次數學計算之前,基於數學角度的思考,加上這些非0判斷,這些參與計算的值是不可以為0的,可以使用assert斷言來過濾和判斷,或者根據需求給出預設值。翻譯到實處就是說debug版本的提供assert斷言給出明確的錯誤提示給測試同學作為測試依據,release版根據需求過濾此類錯誤留下log或者根據實際需求給出預設值(我是很牴觸預設值這玩意兒的,不建議給出預設值,除非是必要的)。

c語言中的inf和nan

計算calcdistancetohead的距離時,發現有輸出 nan的列印。跟蹤列印資料後,發現有sqrt資料異常的嫌疑。首先,解釋一下它們的意思 inf表示 無窮大 是infinite的縮寫。nan表示 無效數字 是not a number的縮寫。其次,這兩個是值會在浮點運算結果未定義或者無法表示...

python之NAN和INF值處理

首先我們要知道這兩個英文單詞代表的什麼意思 nan not a number,不是乙個數字的意思,但是他是屬於浮點型別的,所以想要進行資料操作的時候需要注意他的型別。inf infinity,代表的是無窮大的意思,也是屬於浮點型別。np.inf表示正無窮大,np.inf表示負無窮大,一般在出現除數為...

C語言中的nan和inf使用

本文總結nan和inf在c語言當中的含義 產生和判定方法。表示not a number,等同於 ind indeterminate windows 對浮點數進行了未定義的操作 對負數開方,對負數求對數,0.0 0.0,0.0 inf inf inf inf inf這些操作都會得到nan。0 0會產生...