有没有办法将来自不同语言的这两个值对齐?

Is there a way to align both these values from different languages?

本文关键字:两个 对齐 将来 语言 有没有      更新时间:2023-10-16

两种语言的sqrt函数出现问题。

我有一个 JAVA API 和C++客户端,我正在尝试在两者中使用sqrt函数,但它们给我的数字略有不同。

输入为:

x = 25.0
y = 5625.0

爪哇岛:

double distance = Math.sqrt(x + y); 
// outputs 75.16648189186454

C++:

const double distance = std::sqrt(x + y);
// outputs 75.166481891864535

我需要数字与我在 API 和客户端中将它们用作种子相同。有什么办法可以做到这一点吗?理想情况下,java输出75.16648189186454,但是,我会选择其中之一。

非常感谢

当我查看来自 C++ 和 Java 的部分时,它们的结果是:

爪哇岛:

4634989787871853517

C++:

4634989787871853517

这意味着它们都是相同的位。由于它们应该遵循 IEEE-754,这意味着两种语言具有相同的值。您只看到一个输出在一种语言中被略微截断,但值不是。

浮点数不精确您不能依赖不同的实现(语言(获得完全相同的值。您也不能依赖相同的语言在不同的硬件上获得相同的价值。

序列化浮点数并在不同的语言和/或硬件嵌入之间传输它们是一个难题(不是 N/P 困难,但仍然非常困难(。

我建议阅读这些链接以获取深入的详细信息:

每个计算机科学家都应该知道的关于浮点运算的知识

浮点数学坏了吗?

有时浮点数学是完美的

扩展 Shawn 的评论:C++ 回复有 17 位数字,java 回复有 16 位。如果将 17 位数字四舍五入,您将获得相同的结果,即 35 位四舍五入为 4。Double 实际上略小于 16(大约 52+1 位乘以对数 2(的有意义数字,因此C++结果具有误导性的准确性。您可以控制在C++和Java中显示的数字数,但正如Shawn所说,计算机内部的实际数字是相同的。

相关文章: