问题标签 [precision]
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++ - 除法双精度时意外损失精度
我有一个函数 getSlope ,它以 4 个双精度数作为参数,并返回另一个使用给定参数计算的双精度数,方法如下:
问题是,当使用参数调用此函数时,例如:
返回的结果是:
这对我的计算来说不是一个好的结果。我已经使用 Mathematica 计算了斜率,相同参数的斜率结果是:
或更多数字以提高精度:
我的程序返回的结果在我进一步的计算中并不好。此外,我不明白程序如何从 10.845222072678331 开始返回 10.8557(假设这是除法的近似结果)?我怎样才能为我的部门取得好成绩?
提前谢谢你,马达琳娜
我使用命令行打印结果:
可能是我的参数可能不好,因为我从另一个程序中读取它们(它计算一个图表;在我从他的图表中读取这个参数之后,我刚刚显示它们以查看它们的值但可能显示的向量不一样计算值的内部精度..我不知道这真的很奇怪。出现了一些数值错误..)
当计算我从中读取参数的图形时,会使用一些用 C++(带有模板)编写的数值库。此计算不使用 OpenGL。
谢谢你,马达琳娜
c# - 为什么在C#中添加多个双精度时顺序会影响舍入
考虑以下 C# 代码:
result1 应该总是等于 result2 对吧?问题是,它没有。结果 1 为 3.3,结果 2 为 3.3000000000000003。唯一的区别是常量的顺序。
我知道双打的实现方式可能会出现舍入问题。我知道如果我需要绝对精度,我可以使用小数。或者我可以在 if 语句中使用 Math.Round() 。我只是一个想了解 C# 编译器在做什么的书呆子。谁能告诉我?
编辑:
感谢迄今为止建议阅读浮点运算和/或谈论 CPU 如何处理双精度数的固有不准确性的所有人。但我觉得我的问题的主旨仍未得到解答。这是我没有正确措辞的错。让我这样说:
分解上面的代码,我预计会发生以下操作:
让我们假设上述每个添加都有一个舍入误差(编号为 e1..e4)。所以 r1 包含舍入误差 e1,r2 包含舍入误差 e1 + e2,r3 包含 e3,r4 包含 e3 + e4。
现在,我不知道舍入误差是如何发生的,但我希望 e1+e2 等于 e3+e4。显然不是,但这对我来说似乎是错误的。另一件事是,当我运行上面的代码时,我没有得到任何舍入错误。这就是让我认为是 C# 编译器在做一些奇怪的事情而不是 CPU 的原因。
我知道我问了很多,也许任何人都能给出的最佳答案是去攻读 CPU 设计的博士学位,但我只是想我会问。
编辑 2
从我的原始代码示例中查看 IL,很明显是编译器而不是 CPU 执行此操作:
编译器正在为我添加数字!
c# - 为什么 1.0f + 0.0000000171785715f 返回 1f?
经过一小时试图在我的代码中查找错误后,我终于找到了原因。我试图向 1f 添加一个非常小的浮点数,但什么也没发生。在试图弄清楚为什么我发现将那个小浮点数添加到 0f 时效果很好。
为什么会这样?这与“数量级”有关吗?这个问题有什么解决方法吗?
提前致谢。
编辑:
更改为双精度或小数目前不是一种选择。
c++ - 确保 C++ 双精度为 64 位
在我的 C++ 程序中,我需要从外部字节序列中提取一个 64 位浮点数。有什么方法可以确保在编译时双精度为 64 位?我应该使用其他类型来存储数据吗?
编辑:如果您正在阅读本文并实际上正在寻找一种方法来确保以 IEEE 754 格式存储,请查看下面的 Adam Rosenfield 的答案。
c - 用双精度表示整数
double(给定字节数,具有合理的尾数/指数平衡)能否始终完全精确地保持该字节数一半的无符号整数的范围?
例如,一个 8 字节的 double 能否完全精确地保存一个 4 字节的 unsigned int 的数字范围?
这将归结为如果一个两字节浮点数可以容纳一字节无符号整数的范围。
一字节的无符号整数当然是 0 -> 255。
floating-point - 单精度和双精度浮点运算有什么区别?
单精度浮点运算和双精度浮点运算有什么区别?
我对与视频游戏机相关的实用术语特别感兴趣。例如,Nintendo 64 是否有 64 位处理器,如果有,那是否意味着它能够进行双精度浮点运算?PS3 和 Xbox 360 可以实现双精度浮点运算还是仅实现单精度,并且通常使用的是双精度功能(如果存在的话?)。
floating-point - 在 16、32 和 64 位 IEEE-754 系统中可以表示什么范围的数字?
我对浮点数的表示方式略知一二,但恐怕还不够。
一般的问题是:
对于给定的精度(出于我的目的,以 10 为基数的精确小数位数),对于 16、32 和 64 位 IEEE-754 系统可以表示什么范围的数字?
具体来说,我只对精确到 +/-0.5(个位)或 +/-0.0005(千分位)的 16 位和 32 位数字的范围感兴趣。
c# - 双精度
我有一个代码,但我不明白。我正在开发一个精度非常重要的应用程序。但它对 .NET 并不重要,为什么?我不知道。
但消息框显示:3.5 请帮帮我,谢谢。
c - windows中c中的睡眠功能。是否存在精度更高的函数?
我想知道是否有人知道可以在 c 中的 windows 中使用的更好的睡眠功能,除了 Sleep(),它需要毫秒输入,并且只保证输入是经过的最短时间。我在 1 毫秒内通过,但实际上延迟了 15-16 毫秒。有什么方法可以准确设置指定的睡眠时间?