问题标签 [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.

0 投票
4 回答
3158 浏览

precision - 避免精度损失的最佳算法?

我最近收到的一项家庭作业要求我们采用在计算机中执行时可能会造成精度损失的表达式,并对其进行更改以避免这种损失。

不幸的是,这样做的方向还不是很清楚。通过观看各种示例,我知道有一些方法可以做到这一点:使用泰勒级数,如果涉及平方根则使用共轭,或者当两个分数相减时找到一个公分母。

但是,我很难准确地注意到何时会发生精度损失。到目前为止,我唯一确定的是,当您减去两个接近相同的数字时,会发生精度损失,因为高位数字很重要,并且您会从四舍五入中丢失这些数字。

我的问题是我应该寻找哪些其他常见情况,以及哪些被认为是接近它们的“好”方法?

例如,这里有一个问题:

从这三个选择中评估这个的最佳和最差算法是什么:

我知道当 x 接近于零时,tan(x) 和 sin(x) 几乎相同。我不明白这些算法如何或为什么在解决问题方面更好或更差。

0 投票
7 回答
4701 浏览

javascript - JavaScript 64 位数字精度

有没有办法在 JavaScript 中表示一个精度高于 53 位的数字?换句话说,有没有办法表示 64 位精度数?

我正在尝试实现一些逻辑,其中 64 位数字的每一位都代表一些东西。当我尝试设置高于 2^53 的位时,我会丢失较低的有效位。

有没有办法实现自定义库或实现这一目标的东西?

0 投票
10 回答
38588 浏览

floating-point - 浮点数的 PI 和精度

Pi 的单/双/扩展精度浮点表示精确到小数点后几位?

0 投票
4 回答
914 浏览

sql - 使用整数并要求乘法与使用小数作为数据类型 - 你的想法是什么?

您对此有何看法?我正在整合一些以制表符分隔的文本格式的新数据,并且所有小数列都保存为单个整数;为了确定小数,您需要将数字乘以 0.01。它针对百分比、重量和定价信息等信息执行此操作。例如,一个项目的价格3259在数据文件中表示,当我想显示它时,我需要将它相乘以获得“真实”数量32.59

你认为这是个好主意还是坏主意?我应该保持我的数据结构与供应商提供的数据结构相同,还是应该将数据库列设为真正的小数并使用 SSIS 或某种 ETL 过程自动将整数列乘以它们的十进制等值?在这一点上,我还没有决定是否要使用 ORM 或存储过程或什么来检索数据,所以我试图从长远来看并决定使用哪种方法。我也可以轻松地在 DTO 或类似的代码中处理这个问题,类似于:

但这似乎是班级的额外和不必要的工作。您将如何处理这个问题,请记住,数据是由供应商以整数格式提供的,您将经常需要从中获取更新。

0 投票
6 回答
2617 浏览

precision - 使用泰勒级数避免精度损失

我正在尝试使用泰勒级数来开发一个数值合理的算法来解决一个函数。我已经有一段时间了,但还没有运气。我不确定我做错了什么。

功能是

另外:为什么这个函数甚至会出现精度损失?当 x 接近于零时,sin(x)/ln(1+x) 甚至不接近与 x 相同的数字。我看不出意义在哪里消失了。

为了解决这个问题,我相信我需要对 sin(x) 和 ln(1+x) 使用泰勒展开,它们是

分别。我曾尝试使用相似的分母来组合 x 和 sin(x)/ln(1+x) 分量,甚至将这三个分量组合起来,但最终似乎没有任何效果。任何帮助表示赞赏。

0 投票
16 回答
579525 浏览

c++ - 如何使用 cout 以全精度打印双精度值?

在我之前的问题中,我正在打印一个在我没有预料到的情况下被四舍五入的double使用。cout如何使用全精度进行cout打印?double

0 投票
4 回答
1878 浏览

c# - 画布上的 MouseLeftButtonDown 需要太高的精度

我正在响应添加到 WPF 画布的元素上的 MouseLeftButtonDown 事件。单击时一切正常(即事件处理程序正确触发),但它需要鼠标指针的过多精度。你必须完美地站在圈子的顶端才能让它发挥作用。我需要它更宽容一点;也许至少 1 或 2 个像素可以原谅。画布上的元素都是漂亮的大圆圈(大约屏幕上四分之一的大小),所以圆圈本身并不算小,但每个的StrokeWidth都是1,所以是一条细线。

你可以在这里看到截图:http: //twitpic.com/1f2ci/full

大多数图形应用程序对鼠标的选择并不那么挑剔,所以我想给用户一种熟悉的体验。

我怎样才能让它更宽容一点。

0 投票
2 回答
27019 浏览

c# - C# 将 20 位精度双精度转换为字符串并再次返回

在 C# 中。我有一个具有 20 位精度的双精度数(我从数据库中提取的)。在 Visual Studio(使用 QuickWatch)中,我可以看到双精度值 = 0.00034101243963859839。

我想在文本框中显示这个值,然后当我把它拿出来并将它转换回双精度值时让它成为相同的值。但我总是输掉最后两位数字

我尝试了以下方法:

在这些情况下:

我希望能够做到以下几点:

有没有办法保持最后两位精度?

0 投票
2 回答
3231 浏览

c++ - long double 输出的精度不正确。可能有什么问题?

我有一个long double常量,我将其设置为 const 或非 const。它比long double我的测试工作站上的精度(19 位)长(40 位)。

当我打印出来时,它不再以 19 位精度显示,而是以 16 位显示。

这是我正在测试的代码:

编译:

输出:

我会期待0.6931471805599453094,而是得到0.6931471805599452862.

19位精度被削减到16位是有原因的吗?

这是我的环境:

我在其他版本的 gcc 上看到了同样的问题,例如:

我可以查看 NTL 或其他库,但我很好奇是什么原因造成的。感谢您的洞察力。

0 投票
6 回答
24289 浏览

matlab - 为什么 24.0000 在 MATLAB 中不等于 24.0000?

我正在编写一个程序,我需要删除存储在矩阵中的重复点。问题是,当检查这些点是否在矩阵中时,MATLAB 无法识别它们在矩阵中,尽管它们存在。

在以下代码中,intersections函数获取交点:

结果:

应从结果中消除两点 (vertex1和)。vertex2它应该通过以下命令完成:

这样做之后,我们得到了这个意想不到的结果:

结果应该是一个空矩阵。如您所见,第一对(或第二对?)[33.0000 24.0000]已被淘汰,但不是第二对。

然后我检查了这两个表达式:

问题是什么?


更令人惊讶的是,我制作了一个只有以下命令的新脚本:

结果符合预期: