在C++中使用ceil函数时出现计算错误
Calculation error while using ceil function in C++
我是C++的新手。我正在尝试实现一个分段筛选,以在给定的数字m和n之间找到素数。我的逻辑可能也是错误的。下面是我写的代码,
long long m;
long long n;
std::cin >> m;
std::cin >> n;
vector<bool> sieve(n-m+1,true);
for(int i=2;i<sqrt(n);i++) {
long long j = ceil(float(m)/float(i));
while(j*i <= n) {
sieve[j*i - m] = false;
j++;
}
}
该代码适用于较小的m值(即起始数字)。但是,当我把m的值增加到10^8的时候。我得到了一个seg错误,因为(j*I-m)的值为负数。在对m=63458900的值进行调试期间,对于i=3,我得到j=21152966,而在ceil函数之后应该是21152967。
n-m的值总是小于10^6。
非常感谢您的帮助。非常感谢。
您得到的值相差一——它应该是ceil
之后的21152967
。
您可以简化
ceil(float(m)/float(i))
至
(m + i - 1) / i
从而避免潜在的不精确性
替换相应的值会产生(63458900ll + 3 - 1)/3
,在您的机器上应该是21152967
。
相关文章:
- 我的字符计数代码计算错误.为什么
- 为什么 2 个双精度值之间的差值计算错误?
- C++ openmp 并行计算计算错误的结果
- Qt qreal计算错误
- C 并行矩阵乘法,计算错误
- Arduino计算错误 - 不应该时给出负值
- 当尺寸变大时,会出现矩阵计算错误
- C++ if 语句数学计算错误
- 浮点数的不准确导致计算错误
- 优化标志会导致计算错误
- Kahan求和算法在GCC编译时存在较大的计算错误
- 为什么在函数中传递参数时会出现算术计算错误
- 增加数组大小时 CUDA 主体磁贴计算错误代码 77
- OpenGL漫射照明计算错误
- 具有参数计算错误的重载函数
- 我的程序中有计算错误吗
- 在C++中使用ceil函数时出现计算错误
- 模拟读数计算错误
- struct和time_t的计算错误
- Pow()计算错误