问题标签 [double-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 投票
2 回答
588 浏览

c++ - C++:罪(M_PI/6)= 0.5?

我正在编写一个科学程序,它在其主要算法中使用正弦的共同值,即sin(M_PI/N)for N = 1, 2, 3, 4, 5, 6

因为我希望我的程序尽可能快,所以我想:让我们将这些值存储在一个向量中,而不是一遍又一遍地计算它们。它看起来像这样:

所以现在在我的主要算法中我写s = sin_pi_over_n_[n-1];而不是s = sin(M_PI/n);.

但令我大吃一惊的是,该程序的速度几乎是原来的两倍!我想,真的,读取向量中的值需要那么长时间吗?但后来我意识到这不是问题所在:如果我改写

然后程序又快了!然后我想:我的正弦值有问题。但疯狂的是,即使我只替换最后一行sin_pi_over_n_.push_back(sin(M_PI/6.0));sin_pi_over_n_.push_back(0.5);程序又慢了!是关于双精度吗?我有点怀疑:如果我问std::cout << abs(sin(M_PI/6.0) - 0.5) << std::endl;,我会0进入我的终端。

哎呀:我才意识到;如果我问std::cout << sin(M_PI/6.0) - 0.5 << std::endl;(没有abs),我会得到-5.55112e-17. 我仍然会继续发布这个问题,因为这种行为对我来说似乎不可思议。如果这种不可预知的现象对性能有如此大的影响,我怎么可能优化我的程序的速度?

感谢您的见解!

编辑:也许我还不够清楚。在我的程序中,我有一堂课Algo。当我执行我的程序时,某个函数,比如说my_function,被调用了很多次。在这个函数中,一行是:s = sin(M_PI/n);. 我想我会用 替换这一行s = sin_pi_over_n_[n-1];,其中sin_pi_over_n_[n-1]是一个向量,它存储为类的成员变量Algo,我在 的构造函数中一劳永逸地填充它Algo。希望这能让事情更清楚。

编辑 2:好的,你们中的一些人似乎希望我发布更多代码。它来了:

Algo

会员功能create_sines

成员函数super_radius_update(我my_function在上面重命名):

恐怕我很难发送一个您可以运行的最小完整示例,因为整个课程有点长而且复杂。我可以尝试,但我仍然必须发布大量代码,而且我需要相当长的时间来提取......

我在 Linux Ubuntu 12.04 64 位笔记本电脑上使用 Qt creator 4.8 64 位。

编辑 3 或 4:我为所有的编辑道歉。有一条重要的信息我没有告诉你:程序将运行(基本上是调用函数super_radius_update),直到某些错误落在某个容差范围内。因此,我相信使程序变慢或变快的不是执行时间,super_radius_update而是该函数的调用次数。使用这样或这样的值sin(M_PI/N)将对错误达到容差的速度产生影响。

0 投票
1 回答
2421 浏览

android - 是否可以使用 SimpleCursorAdapter 格式化双精度?

我使用以下 SimpleCursorAdapter:

这很好用。但是“campos[]”中的“preco”来自一个 double 值。我可以以某种方式格式化它,以便我的光标(它提供一个列表视图)将在点后显示这个双精度数(如货币价值)?

我可以用一些简单的方式来做吗,比如在某处使用“%.2f”,还是我必须继承 CursorAdapter?

提前致谢。

0 投票
1 回答
4826 浏览

floating-point - 双精度浮点数如何转换为单精度浮点格式?

将数字从双精度浮点格式转换单精度浮点格式会导致精度损失。用于实现这种转换的算法是什么?

数字是大于3.4028234e+38还是小于-3.4028234e+38简单地减少到各自的限制?我觉得转换过程比这更复杂,但我找不到它的文档。

0 投票
1 回答
982 浏览

java - 计算值太大而无法取幂的马尔可夫链概率

我使用公式 exp(X) 作为马尔可夫链的速率。所以选择一个链接相对于另一个链接的比率是 exp(X1)/exp(X2)。我的问题是有时 X 非常大,所以 exp(X) 会超出 的范围double

或者:给定一个 X[i] 数组,其中一些 X[i] 大到 exp(X[i]) 溢出 的范围double,计算每个 i 的 exp(X[i]) / S,其中 S是所有 exp(X[i]) 的总和。

0 投票
2 回答
2294 浏览

java - 何时在 java 中使用 expm1 而不是 exp

我对在 java 中使用 expm1 函数感到困惑 The Oracle java doc for Math.expm1 说:

返回 exp(x) -1。请注意,对于接近 0 的 x 值,expm1(x) + 1 的精确总和比 exp(x) 更接近 ex 的真实结果。

但是这个页面说:

但是,对于 x 的负值,大约为 -4 或更低,用于计算 Math.exp() 的算法表现相对较差,并且会出现舍入误差。用不同的算法计算 ex - 1 然后在最终结果上加 1 会更准确。

我们应该将 expm1(x) 用于负 x 值还是接近 0 值?

0 投票
3 回答
2350 浏览

c - C中双精度数据类型的最大精度是多少?

为了比较 C 中的两个双精度类型变量,我定义了#define EQUALITY_EPSILON = 1e-8. 我正在做如下比较:

我面临的问题是我的代码中的分数非常小,因此对于EQUALITY_EPSILON = 1e-8,在某些情况下,比较的结果是相等的。我的问题是我可以设置多小EQUALITY_EPSILON

0 投票
2 回答
1931 浏览

c# - 如何知道双字符串是否是往返安全的?

我有一个双精度的文本表示,想知道将它往返双精度和返回是否安全。如果我还想接受任何类型的数字样式的输入,我怎么知道这一点?或者我如何知道使用 Double.Parse 解析双字符串时是否丢失了任何精度?或者我如何 ToString 一个 double 以匹配与另一个双字符串相同的格式?我认为任何这些问题的答案都是一个解决方案。

0 投票
3 回答
233 浏览

c# - 哪种方式更准确?

我需要将一个数字范围划分为一些具有相同长度的段。但我无法决定哪种方式更准确。例如:

大约是(double)int1 / int2 * doubleint1 * double / int2。哪种方式更准确?我应该使用哪种方式?

更新

以下代码将显示差异:

0 投票
2 回答
790 浏览

math - cuda 双精度对数误差

我在 3.0 计算能力上使用 C for CUDA,并且必须使用内置的双精度对数函数。我发现为此我应该使用double log(double x)函数(文档)。但是,如果我在双精度范围内传递一个非常小的数字(例如double x = 6.73E-42), log(x)函数返回-Infinity. 在 JavaMath.log()函数中返回相同的值-94.802。这是 CUDA 数学库中的错误还是我有什么问题?

编辑:这是我在内核函数中使用的代码

0 投票
1 回答
1414 浏览

ios - 坐标的两位小数

我正在尝试将字符串转换为双精度值以将其用作注释中的坐标。

我需要双精度值在地图上放置 5 个小数位。

假设字符串是hello,我需要的双精度是whatsup

字符串的格式正是我想要的格式,我想让它成为双精度,所以我使用了字符串的 doublevalue 属性。

所以现在如果我想写:

它给出了带有额外零的双倍。

我该怎么写

哪个是只有 5 个小数位的双精度数?
我可以在这里以某种方式实现“%.5f”吗?

已经尝试过 numberformatter,但它给了我一个 NSnumber。我需要一个双:

我在 for 循环中使用此代码来绘制注释(引脚)。

当我对双打使用相同的 forloop 时,我对其进行硬编码时效果很好。但是当我使用此代码从 csv 文件中获取值时,我没有得到任何引脚: