c++ - 计算 alglib::real_1d_array 中元素总和的奇怪错误

标签 c++ alglib

好的,这次我有一个并不总是出现的非常奇怪的错误。这是实际包含问题的功能。它所做的只是对 vector 的元素求和。它在大多数情况下都有效,但在少数情况下它往往会变得很成问题。

int sumvec(vect v) {
    int i = 0;
    int sum = 0;
    int l = v.length();
    std::cout << "Sum of vector " << v.tostring(3) << std::endl;
    for (; i < l; i++) {
        sum += v[i];
        std::cout << v[i] << " " << sum << " ";
    };
    std::cout << std::endl;
    return sum;
}

这里 vect 是使用 typedef alglib::real_1d_array vect; 定义的。好的,那我得到了什么?嗯..

vector 总和 [1.000,1.000,0.000,1.000,1.000,1.000] 1 0 1 0 0 0 1 0 1 0 1 1

什么?!!!!!!

最佳答案

由于您的总和变量是一个整数,因此在对 vector 中非整数的元素求和时可能无法获得预期的结果。

如果您的元素的值为 0.999999999而不是 1.00000然后打印它们可以四舍五入为 1.00000但是当您将它们添加到一个整数时,该值将被截断为 0。

根据提供的输出判断,您的所有值都小于 1除了最后一个大于或等于 1。

有两种可能的解决方案:

  1. 更改 sum 的类型成为floatdouble .
  2. 将您的计算更改为:sum += static_cast<int>(round( v[i] ));

请注意,您的编译器可能会警告将 double 截断为整数。注意编译器警告,它们通常表示存在错误。

关于c++ - 计算 alglib::real_1d_array 中元素总和的奇怪错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52839141/

相关文章:

C++ 字符串像人一样排序?

c++ - Python + alglib + NumPy : how to avoid converting arrays to lists?

c++ - 使用Alglib的 vector 和矩阵基本运算(加、乘)

c# - 矩阵乘法算法

c++ - 强制 g++ 归零初始化内存

c++ - 为什么 boost::shared_ptr 中的引用计数器不是易变的?

c++ - 我如何使用 MSVC++ 2010 使 dll 更小?

c++ - 如何创建一个非常大的唯一整数数组?

c++ - 如何使用 alglib 创建 double 矩阵?

c++ - 使用 alglib 进行线性判别分析