为了账号安全,请及时绑定邮箱和手机立即绑定

有没有办法使不同语言的这两个值保持一致?

有没有办法使不同语言的这两个值保持一致?

慕姐8265434 2023-06-08 19:56:38
两种语言的 sqrt 函数有问题。我有一个 JAVA API 和 C++ 客户端,我试图sqrt在两者中使用这些函数,但它们给我的数字略有不同。输入是: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我需要的数字与我在 API 和客户端中将它们用作种子的数字相同。有什么办法吗?理想情况下, javaoutput 75.16648189186454,但是,我会选择其中一个。
查看完整描述

3 回答

?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

当我查看 C++ 和 Java 的位时,它们会导致:

爪哇:

4634989787871853517

C++:

4634989787871853517

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


查看完整回答
反对 回复 2023-06-08
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

浮点数并不精确,您不能依赖于不同的实现(语言)获得完全相同的值。你也不能指望同一种语言在不同的硬件上获得相同的价值。

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

查看完整回答
反对 回复 2023-06-08
?
噜噜哒

TA贡献1784条经验 获得超7个赞

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



查看完整回答
反对 回复 2023-06-08
  • 3 回答
  • 0 关注
  • 140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信