我在Perl中有一个简单的for循环
for ($i=0; $i <= 360; $i += 0.01)
{
print "$i ";
}
Run Code Online (Sandbox Code Playgroud)
为什么当我运行这段代码时,我得到以下输出,一旦达到0.81,它突然开始加载更多的小数位?我知道我可以简单地围绕以避免这个问题,但我想知道它为什么会发生.0.01的增量似乎并不疯狂.
0.77
0.78
0.79
0.8
0.81
0.820000000000001
0.830000000000001
0.840000000000001
0.850000000000001
0.860000000000001
0.870000000000001
Run Code Online (Sandbox Code Playgroud) 在我的财务相关应用程序中,Double用作货币数据的数据类型.但最近我发现Double在舍入时有问题.
例如,
存储为357549999999999999999999 35.75 的双变量35.25 内存储为35.750000000000000000001
那么什么时候它试图将数字四舍五入到一个小数点35.25 = 35.3 35.75 = 35.8
这意味着从地板到圆形天花板的一个数字.
有人可以为这个问题提出解决方案吗?
在Visual C++中,适用于货币数据的数据类型是什么
这是一个让我在过去几个小时里完全感到困惑的问题......
我的程序中有一个硬编码的等式:
double s2;
s2 = -(0*13)/84+6/42-0/84+24/12+(6*13)/42;
Run Code Online (Sandbox Code Playgroud)
每次我运行该程序时,计算机会吐出3作为答案,但是手动进行数学计算,我得到4.更进一步,在将方程式输入Matlab之后,我也得到了答案4.这里有什么进展?
我唯一能想到的就是这里出错了就是圆满错误.然而,最多有5个舍入误差,再加上使用双精度数学,我的最大误差将非常小,所以我怀疑这是问题所在.
有谁能提供任何解决方案?
提前致谢,
-Faken
想法是将两个矩阵相乘。并使用 Eigen 进行相同的乘法,然后检查结果是否相同。
在下面制作N = 2返回same thing但N = 1000返回NOT same thing。为什么?
#include <cstdlib>
#include <iostream>
#include <Eigen/Dense>
using namespace std;
using namespace Eigen;
const int N = 1000;
void mult_matrix(double x[N][N], double y[N][N], double z[N][N]) {
int rows = N;
int cols = N;
for (int i = 0; i < rows; i++)
for (int j = 0; j < cols; j++)
for (int k = 0; k < cols; k++)
z[i][j] …Run Code Online (Sandbox Code Playgroud)