问题标签 [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.
c# - 为什么我的数字四舍五入不正确?
这感觉就像那种只会在原地失败的代码,但我会尝试将它改编成代表我所看到的代码片段。
单步执行代码后,i==269,i2==268。这里发生了什么来解释差异?
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 位十进制数字,所以这样的计算不应该引起问题。
visual-c++ - 什么决定了 x87 FPU 控制字的默认设置?
什么决定了 x87 FPU 控制字的默认设置——特别是精度控制字段?编译器是否根据目标处理器设置它?是否有编译器选项可以更改它?
在 Intel Core Duo 处理器上使用 Microsoft Visual C++ 2008 Express Edition,精度控制字段的默认设置为“01b”,表示双精度(53 位)。我想知道 - 为什么默认值不是“11”b,或扩展(64 位)精度?
(我知道我可以使用 _controlfp 更改它。)
c++ - Visual C++ 中的浮点精度
你好,
我正在尝试使用来自 Jonathan Richard Shewchuk 的计算几何的 稳健谓词。
我不是程序员,所以我什至不确定我在说什么,我可能会犯一些基本的错误。
关键是谓词应该允许具有自适应浮点精度的精确算术。在我的电脑上:Asus pro31/S(Core Due Centrino 处理器)它们不工作。问题可能在于我的计算机可能在浮点精度方面使用了一些改进,这与 Shewchuk 使用的冲突。作者说:
现在我想知道的是,有一种方法,也许是一些编译器选项,可以关闭内部扩展精度浮点寄存器。
我真的很感谢你的帮助
floating-point - 定点到浮点和向后
正在转换固定 Pt。(固定 n 位的分数)到 IEEE 双重安全?
即:IEEE双重格式是否可以表示一个定点可以表示的所有数字?
测试:一个数字变为浮动 pt 格式,然后回到原来的固定 pt 格式。
c - 错误的Visual C浮点/双转换?
在 Visual C++ 中,我在 C++ 程序中编写了以下示例:
我用 Visual Studio 2005 编译了程序。在调试器中,我看到以下值:
根据我的知识,d1 是可以的,但 d2 是错误的。
/fp=precise 和 /fp=strict 以及 /fp=fast 一样,也会出现问题。
这里有什么问题?任何提示如何避免这个问题?这会导致严重的数值问题。
floating-point - 是否存在 x 的浮点值,其中 xx == 0 为假?
在大多数情况下,我知道应该使用一系列值(abs(xy) < epsilon)来实现浮点比较测试,但是自减法是否意味着结果为零?
我的猜测是 nan/inf 可能是特殊情况,但我更感兴趣的是简单值会发生什么。
编辑:
如果有人可以引用参考(IEEE 浮点标准),我很乐意选择答案?
floating-point - “epsilon”真的能保证浮点计算中的任何东西吗?
为了使问题简短,假设我想计算sa / (b - c)
上的表达式float
。
为了确保结果有意义,我可以检查是否b
相等c
:
但我的测试表明,如果可能的话,仅仅保证有意义的结果或不提供结果是不够的。
情况1:
结果:不满足 if 条件,但表达式会产生正确的结果 100000008(至于浮点数的精度)。
案例二:
结果:满足 if 条件,但表达式产生的结果没有意义+1.#INF00
。
我发现检查结果而不是参数更可靠:
但是 epsilon 是为了什么,为什么每个人都说 epsilon 好用呢?
c - 为什么这个浮点数的值会从它设置的值改变?
为什么这个 C 程序给出“错误”的输出?
输出:
但输出应该是,12345.054321
。
我在 VS2008 中使用 VC++。
c# - 浮点精度可以依赖于线程吗?
我在 C# 3.0 中有一个基于结构的小型 3D 矢量类,它使用 double 作为基本单位。
一个例子:一个向量的 y 值为
我减去一个 y 值为
我期望的 y 值是
相反,我得到
当我在一个线程中进行整个计算时,我得到 (1)。调试器和 VS 快速监视也返回 (1)。但是,当我在一个线程中运行几次迭代然后从另一个线程调用该函数时,结果是 (2)。现在,调试器也返回 (2)!
我们必须记住,.NET JIT 可能会将值写回内存(网站 Jon Skeet),这会将精度从 80 位(FPU)降低到 64 位(双精度)。但是,(2)的准确度远低于此。
矢量类看起来基本上是这样的
计算就这么简单