作爲開發數值方法庫的一部分,我經常添加單元測試。大多數Assert.AreEqual類型測試目前最多檢查6個小數位數,因爲這種類型的庫不需要超過這個精度。迄今爲止,這些測試已經很好地服務於他們的目的。在單元測試中使用數字高精度的情況
最近,在研究同一個庫的64位版本時,我發現相當多的單元測試的結果在小數點後6位是相同的,但是在小數點後10位或更高處發生變化。我如何從頭開始瞭解這種情況是一個完全不同的故事,但是追逐其中的一些導致瞭解決我從來不知道存在的一些微妙的錯誤。
這使我想到:在單元測試中高精度地檢查數字(例如,10-12位數)似乎是有價值的,或者可能是完全精確的(甚至不知道該怎麼做),即使庫的精度要求不高。這裏的社區通常會爲科學/數字代碼的單元測試數值做些什麼?任何建議/建議/指針?
更多信息:圖書館處理雙重價值。它不是一個金融圖書館等,所以我不使用小數。
如果要求該函數返回一個正確的N個小數位的答案,並且你的函數通過了一系列仔細選擇的測試,那麼在第(N + 1)次之後你的函數是否隨機化一切並不重要小數位,或將其設置爲等於系統時間除以單位指針。那麼,我想你的問題真正的答案不是「使用更高的精度」,而是「使用更好的測試用例」。 – Patrick87
在JUnit中,您可以指定浮點比較所需的平等度。 – Cuga
你使用什麼數據類型?你爲圖書館創建了什麼,'Decimal'或'Float' /'Double'?因爲如果它是最後兩個之一,我對你有'壞'的消息... –