给定一个下限,上限和步长,我想创建一个向量,该向量列出包含从下限开始到上界的数字,并用该步长分隔开。例如,下限= 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。
我想知道,是否有某种方法或技巧可以帮助我避免这些问题?
就其价值而言,使用astd::vector
和for
循环会更直接。
std::vector<double> createArray(double lower, double upper, double step)
{
std::vector<double> values;
for (double value = lower; value <= upper; value += step)
{
values.push_back(value);
}
return values;
}
这将使实际值尽可能接近正确的浮点值,而不会累积舍入误差。您仍然可以使用该<iomanip>
库将值输出到首选精度。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句