【发布时间】:2015-05-13 05:26:48
【问题描述】:
给定一个下限、上限和步长,我想创建一个向量,其中列出了包含从下限开始的数字,然后逐步上升到上限,由步长分隔。 例如下 = 1.5,上 = 6.0,步长 = 1.0: 返回 [1.5, 2.5, 3.5, 4.5, 5.5]。
我的 C++ 代码目前是:
#include<iostream>
#include<armadillo>
using namespace std;
using namespace arma;
vec createArray( double lower, double upper, double step) {
int arrayLength = int ((upper - lower)/step + 1);
vec array(arrayLength);
for( int j = 0; j < arrayLength; j += 1 )
{
array(j) = lower + j*step;
}
return array;
}
理想情况下它应该可以正常工作,但舍入错误不断使其输出错误的东西。例如,
int((pow(10,-7)-0)/pow(10,-9));
有时会输出 99 而不是 100,大概是因为 10^-7 被表示为 9.9999...9*10^-8。
我想知道,有没有什么方法或技巧可以帮助我避免这些问题?
【问题讨论】:
-
使用 floor()、ceil()、round() 或 C++ 等价方法。并且可能会添加公差,相对于边界的大小。
标签: c++ rounding-error