兩種語言的 sqrt 函數(shù)有問題。我有一個 JAVA API 和 C++ 客戶端,我試圖sqrt在兩者中使用這些函數(shù),但它們給我的數(shù)字略有不同。輸入是:x = 25.0
y = 5625.0爪哇:double distance = Math.sqrt(x + y);
// outputs 75.16648189186454C++:const double distance = std::sqrt(x + y);
// outputs 75.166481891864535我需要的數(shù)字與我在 API 和客戶端中將它們用作種子的數(shù)字相同。有什么辦法嗎?理想情況下, javaoutput 75.16648189186454,但是,我會選擇其中一個。
3 回答

小唯快跑啊
TA貢獻1863條經(jīng)驗 獲得超2個贊
當我查看 C++ 和 Java 的位時,它們會導致:
爪哇:
4634989787871853517
C++:
4634989787871853517
這意味著它們都是相同的位。由于它們應該遵循 IEEE-754,這意味著兩種語言具有相同的值。您只是看到一個輸出在一種語言中被略微截斷,但值卻沒有。

一只萌萌小番薯
TA貢獻1795條經(jīng)驗 獲得超7個贊
浮點數(shù)并不精確,您不能依賴于不同的實現(xiàn)(語言)獲得完全相同的值。你也不能指望同一種語言在不同的硬件上獲得相同的價值。
序列化浮點數(shù)并在不同語言和/或硬件實現(xiàn)之間傳輸它們是一個難題(不是 N/P 難題,但仍然非常困難)。

嚕嚕噠
TA貢獻1784條經(jīng)驗 獲得超7個贊
擴展 Shawn 的評論:C++ 回復有 17 位數(shù)字,Java 回復有 16 位。如果你將 17 位數(shù)字四舍五入,你會得到相同的結果,因為 35 輪到 4。Double 實際上略小于 16(大約 52+ 1 位乘以 log 2) 有意義的數(shù)字,因此 C++ 結果具有誤導性的精確性。您可以控制在 C++ 和 Java 中顯示的位數(shù),但正如 Shawn 所說,計算機內(nèi)部的實際數(shù)字是相同的。
添加回答
舉報
0/150
提交
取消