问题标签 [floating-accuracy]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
755 浏览

c# - 为什么我的数字四舍五入不正确?

这感觉就像那种只会在原地失败的代码,但我会尝试将它改编成代表我所看到的代码片段。

单步执行代码后,i==269,i2==268。这里发生了什么来解释差异?

0 投票
5 回答
1175 浏览

c++ - c++浮点精度损失:3015/0.00025298219406977296

问题。

Microsoft Visual C++ 2005 编译器,32 位 windows xp sp3,amd 64 x2 cpu。

代码:

计算的结果(即“f”)是 11917835.000000000 ( ((unsigned __int64 )(&f)) == 0x4166bb4160000000) 虽然它应该是 11917834.814763514 (即((unsigned __int64 )(&f)) == 0x4166bb415a128a)
即小数部分丢失。
不幸的是,我需要小数部分才能正确。

问题:
1)为什么会发生这种情况?
2)我该如何解决这个问题?

附加信息:
0)结果直接来自“观察”窗口(没有打印,我没有忘记设置打印精度)。我还提供了浮点变量的十六进制转储,所以我对计算结果非常确定。
1) f = a/b的反汇编为:

2) f = 3015/0.00025298219406977296;产生正确的结果(f == 11917834.814763514 , ((unsigned __int64 )(&f)) == 0x4166bb415a128aef ),但看起来在这种情况下,结果只是在编译时计算:

那么,我该如何解决这个问题呢?

PS我找到了一个临时解决方法(我只需要除法的小数部分,所以我现在只使用 f = fmod(a/b)/b ),但我仍然想知道如何正确解决这个问题 -双精度应该是 16 位十进制数字,所以这样的计算不应该引起问题。

0 投票
4 回答
1678 浏览

visual-c++ - 什么决定了 x87 FPU 控制字的默认设置?

什么决定了 x87 FPU 控制字的默认设置——特别是精度控制字段?编译器是否根据目标处理器设置它?是否有编译器选项可以更改它?

在 Intel Core Duo 处理器上使用 Microsoft Visual C++ 2008 Express Edition,精度控制字段的默认设置为“01b”,表示双精度(53 位)。我想知道 - 为什么默认值不是“11”b,或扩展(64 位)精度?

(我知道我可以使用 _controlfp 更改它。)

0 投票
5 回答
6022 浏览

c++ - Visual C++ 中的浮点精度

你好,

我正在尝试使用来自 Jonathan Richard Shewchuk 的计算几何的 稳健谓词

我不是程序员,所以我什至不确定我在说什么,我可能会犯一些基本的错误。

关键是谓词应该允许具有自适应浮点精度的精确算术。在我的电脑上:Asus pro31/S(Core Due Centrino 处理器)它们不工作。问题可能在于我的计算机可能在浮点精度方面使用了一些改进,这与 Shewchuk 使用的冲突。作者说:

现在我想知道的是,有一种方法,也许是一些编译器选项,可以关闭内部扩展精度浮点寄存器。

我真的很感谢你的帮助

0 投票
2 回答
915 浏览

floating-point - 定点到浮点和向后

正在转换固定 Pt。(固定 n 位的分数)到 IEEE 双重安全?

即:IEEE双重格式是否可以表示一个定点可以表示的所有数字?

测试:一个数字变为浮动 pt 格式,然后回到原来的固定 pt 格式。

0 投票
3 回答
1267 浏览

c - 错误的Visual C浮点/双转换?

在 Visual C++ 中,我在 C++ 程序中编写了以下示例:

我用 Visual Studio 2005 编译了程序。在调试器中,我看到以下值:

根据我的知识,d1 是可以的,但 d2 是错误的。

/fp=precise 和 /fp=strict 以及 /fp=fast 一样,也会出现问题。

这里有什么问题?任何提示如何避免这个问题?这会导致严重的数值问题。

0 投票
6 回答
4802 浏览

floating-point - 是否存在 x 的浮点值,其中 xx == 0 为假?

在大多数情况下,我知道应该使用一系列值(abs(xy) < epsilon)来实现浮点比较测试,但是自减法是否意味着结果为零?

我的猜测是 nan/inf 可能是特殊情况,但我更感兴趣的是简单值会发生什么。

编辑:

如果有人可以引用参考(IEEE 浮点标准),我很乐意选择答案?

0 投票
2 回答
11538 浏览

floating-point - “epsilon”真的能保证浮点计算中的任何东西吗?

为了使问题简短,假设我想计算sa / (b - c)上的表达式float

为了确保结果有意义,我可以检查是否b相等c

但我的测试表明,如果可能的话,仅仅保证有意义的结果或不提供结果是不够的。

情况1:

结果:不满足 if 条件,但表达式会产生正确的结果 100000008(至于浮点数的精度)。

案例二:

结果:满足 if 条件,但表达式产生的结果没有意义+1.#INF00

我发现检查结果而不是参数更可靠:

但是 epsilon 是为了什么,为什么每个人都说 epsilon 好用呢?

0 投票
5 回答
2802 浏览

c - 为什么这个浮点数的值会从它设置的值改变?

为什么这个 C 程序给出“错误”的输出?

输出:

但输出应该是,12345.054321

我在 VS2008 中使用 VC++。

0 投票
1 回答
684 浏览

c# - 浮点精度可以依赖于线程吗?

我在 C# 3.0 中有一个基于结构的小型 3D 矢量类,它使用 double 作为基本单位。

一个例子:一个向量的 y 值为

我减去一个 y 值为

我期望的 y 值是

相反,我得到

当我在一个线程中进行整个计算时,我得到 (1)。调试器和 VS 快速监视也返回 (1)。但是,当我在一个线程中运行几次迭代然后从另一个线程调用该函数时,结果是 (2)。现在,调试器也返回 (2)!

我们必须记住,.NET JIT 可能会将值写回内存(网站 Jon Skeet),这会将精度从 80 位(FPU)降低到 64 位(双精度)。但是,(2)的准确度远低于此。

矢量类看起来基本上是这样的

计算就这么简单