尽管C ++舍入错误仍定义范围

悖论

给定一个下限,上限和步长,我想创建一个向量,该向量列出包含从下限开始到上界的数字,并用该步长分隔开。例如,下限= 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::vectorfor循环会更直接

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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用C ++中的floor函数舍入错误

来自分类Dev

在C中舍入小数错误?

来自分类Dev

pthreads 如何导致 c 中的分段错误(尽管没有分配内存)?

来自分类Dev

尽管声明了可变项,但出现范围错误

来自分类Dev

C ++范围定义变量?

来自分类Dev

尽管定义了键,但EntityType没有键定义错误

来自分类Dev

将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

来自分类Dev

将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

来自分类Dev

尽管正确链接了HTML,但仍存在未定义的错误

来自分类Dev

错误:尽管使用了包含防护,也重新定义了班级

来自分类Dev

尽管使用了Microsoft.Net.Compilers nuget包,VS2013上仍存在C#6错误消息

来自分类Dev

C 错误:函数和存储大小的隐式声明未知,尽管函数和结构是包含的头文件的成员

来自分类Dev

我的 C# 代码对所有 if 语句都进行了彻底检查,尽管它们都是错误的

来自分类Dev

C ++ Visual Studio Express 2012中的舍入错误

来自分类Dev

C ++ Visual Studio Express 2012中的舍入错误

来自分类Dev

在C#中将小数舍入似乎是错误的

来自分类Dev

名称错误:名称未定义。尽管定义了名称,为什么 Python 会抛出此错误?

来自分类Dev

尽管覆盖但编译错误

来自分类Dev

尽管覆盖但编译错误

来自分类Dev

C2011:“卡”:“类”类型的重新定义(尽管使用了包含保护,但未在.cpp文件中重新定义类)

来自分类Dev

尽管寄存器声明正确,但Verilog中的索引超出范围错误

来自分类Dev

尽管在组件中定义了 Vuex mapstate,但仍出现未定义的错误

来自分类Dev

在C / C ++中定义数字范围

来自分类Dev

多定义错误C ++

来自分类Dev

使用c ++中的两个略有不同的头文件(尽管是一个.lib文件)会导致很多错误,但未生成警告。怎么预防呢?

来自分类Dev

C ++-在类定义末尾创建的对象的范围

来自分类Dev

C ++-在类定义末尾创建的对象的范围

来自分类Dev

尽管定义了ClassTag,但没有可用的ClassTag

来自分类Dev

尽管重新定义仍删除完整对象

Related 相关文章

  1. 1

    使用C ++中的floor函数舍入错误

  2. 2

    在C中舍入小数错误?

  3. 3

    pthreads 如何导致 c 中的分段错误(尽管没有分配内存)?

  4. 4

    尽管声明了可变项,但出现范围错误

  5. 5

    C ++范围定义变量?

  6. 6

    尽管定义了键,但EntityType没有键定义错误

  7. 7

    将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

  8. 8

    将int转换为float会导致错误的值(尽管不是通常的十进制舍入错误)

  9. 9

    尽管正确链接了HTML,但仍存在未定义的错误

  10. 10

    错误:尽管使用了包含防护,也重新定义了班级

  11. 11

    尽管使用了Microsoft.Net.Compilers nuget包,VS2013上仍存在C#6错误消息

  12. 12

    C 错误:函数和存储大小的隐式声明未知,尽管函数和结构是包含的头文件的成员

  13. 13

    我的 C# 代码对所有 if 语句都进行了彻底检查,尽管它们都是错误的

  14. 14

    C ++ Visual Studio Express 2012中的舍入错误

  15. 15

    C ++ Visual Studio Express 2012中的舍入错误

  16. 16

    在C#中将小数舍入似乎是错误的

  17. 17

    名称错误:名称未定义。尽管定义了名称,为什么 Python 会抛出此错误?

  18. 18

    尽管覆盖但编译错误

  19. 19

    尽管覆盖但编译错误

  20. 20

    C2011:“卡”:“类”类型的重新定义(尽管使用了包含保护,但未在.cpp文件中重新定义类)

  21. 21

    尽管寄存器声明正确,但Verilog中的索引超出范围错误

  22. 22

    尽管在组件中定义了 Vuex mapstate,但仍出现未定义的错误

  23. 23

    在C / C ++中定义数字范围

  24. 24

    多定义错误C ++

  25. 25

    使用c ++中的两个略有不同的头文件(尽管是一个.lib文件)会导致很多错误,但未生成警告。怎么预防呢?

  26. 26

    C ++-在类定义末尾创建的对象的范围

  27. 27

    C ++-在类定义末尾创建的对象的范围

  28. 28

    尽管定义了ClassTag,但没有可用的ClassTag

  29. 29

    尽管重新定义仍删除完整对象

热门标签

归档