不同语言的浮点精度

amw*_*l04 6 c c++ java go rust

我目前正在进行坐标之间的距离计算,并且根据所使用的语言得出的结果略有不同。

计算的一部分是计算cosine给定值的radian。我得到以下结果

// cos(0.8941658257446736)

// 0.6261694290123146 node
// 0.6261694290123146 rust
// 0.6261694290123148 go
// 0.6261694290123148 python
// 0.6261694290123148 swift
// 0.6261694290123146 c++
// 0.6261694290123146 java
// 0.6261694290123147 c
Run Code Online (Sandbox Code Playgroud)

我想尝试并了解原因。如果16dp c四舍五入,过去是唯一的“正确”答案。我感到惊讶的是python,结果有所不同。

目前,这种微小的差异正在被放大,并且超过000个位置增加了不小的距离。

不太确定这是如何重复的。另外,我要求的是整体答案,而不是具体的语言。我没有计算机科学学位。

更新 我接受这可能是一个太宽泛的问题,我想我很好奇为什么我的背景不是CS。我感谢评论中发布的博客链接。

更新2

这个问题源于将服务从移植nodejsgoGo甚至更奇怪,因为距离的总和随多个值而变化,所以我现在无法运行测试。

给定一个坐标列表并计算距离并将它们加在一起,我得到不同的结果。我没有问一个问题,但似乎go会产生不同的结果。

9605.795975874069
9605.795975874067
9605.79597587407
Run Code Online (Sandbox Code Playgroud)

为了完整起见,这里是我正在使用的距离计算:

// cos(0.8941658257446736)

// 0.6261694290123146 node
// 0.6261694290123146 rust
// 0.6261694290123148 go
// 0.6261694290123148 python
// 0.6261694290123148 swift
// 0.6261694290123146 c++
// 0.6261694290123146 java
// 0.6261694290123147 c
Run Code Online (Sandbox Code Playgroud)

Ger*_*erd 1

一般来说,浮点数的表示是由标准IEEE 754定义的,我的假设是该标准由所有(主要)编程语言实现。

精度和舍入是已知 问题,有时可能会导致意外结果

根据编程语言或使用的数学库,可能影响计算结果的方面:


归档时间:

查看次数:

250 次

最近记录:

6 年,3 月 前