这个代码的浮点错误有人能帮我吗
Floating Point Error With This Code Can someone help me
我正面临这个中国余数理论的问题我正在使用input.txt文件作为输入并试图生成一个output.txt文件,但它显示浮点错误。当我用一些特定的输入运行时,它是工作的,但对于许多测试用例来说,它不工作
#include <bits/stdc++.h>
#include <fstream>
#include <iostream>
using namespace std;
int ModInverse(int a, int m)
{
a = a % m;
for(int x = 1; x < m; x++)
if(((a * x) % m) == 1) return x;
}
int findMinX(int num[], int rem[], int k) {
int prod = 1;
for(int i = 1; i <= k; i++) prod *= num[i];
int result = 0;
for(int j = 1; j <= k; j++) {
int y = prod / num[j];
result = result + rem[j] * ModInverse(y, num[j]) * y;
}
return result % prod;
}
int main() {
ifstream infile;
infile.open("input.txt");
int n;
int num[100];
int rem[100];
infile >> n;
for(int i = 0; i < n; i++) infile >> num[i];
for(int i = 0; i < n; i++) infile >> rem[i];
infile.close();
int k = sizeof(num) / sizeof(num[0]);
ofstream myfile;
myfile.open("output.txt");
myfile << findMinX(num, rem, k);
myfile.close();
return 0;
}
这些行:for(int i = 1; i <= k; i++)
for(int j = 1; j <= k; j++)
将导致i
和j
出界。
数组索引从C++中的0
开始,因此应该使用索引0
到k-1
。
改为:
for(int i = 0; i < k; i++)
for(int j = 0; j < k; j++)
另一件值得检查的事情是这个功能:
int ModInverse(int a, int m)
{
a = a % m;
for(int x = 1; x < m; x++)
if(((a * x) % m) == 1) return x;
}
给定错误的输入,它将退出循环并不返回任何内容,这将导致未定义的行为。如果文件包含无法处理的数据,则验证输入并打印错误消息。
下面是一个让我崩溃的input.txt
的例子:
5
1 2 3 4 5
2 3 4 5 6
另一个值得关注的原因是,在对函数的调用中使用k
而不是n
:myfile << findMinX(num, rem, k);
这意味着函数将始终在100个值上工作。其中一些可能是未初始化的,还有未定义的行为。
相关文章:
- 错误处理.将系统错误代码映射到泛型
- 为什么我在使用void函数时得到错误代码C2276
- 尝试链接我的着色器时,我收到错误代码"error c5145 must write to gl_position"
- 逻辑运算符上出现错误代码 a')'
- 'val' Arduino 错误代码之前的预期'('
- 我在贪吃蛇游戏中收到了错误代码 -1073741571
- 根据 GetLastError 直接写入磁盘会导致错误代码 5
- 当我选择大于 720 的矩阵大小时,程序退出并显示错误代码.可能是什么原因?
- 创建进程 API 失败,在窗口 122 上出现错误代码 10
- 使用另一个函数调用一个函数(都在类中)时出现问题.没有错误代码C++
- 当命令失败时,gzip 会在 C++ 中返回错误代码吗?
- 从 C++ 调用 cURL 命令会返回意外的错误代码,如 1792 和 6656
- WSALookupServiceBegin() 上的错误代码 10022(无效的 arugment)
- C++ Schannel POST 400 错误代码错误请求
- openCL-创建子缓冲区返回错误代码13
- 更新了Runge-Kutta(RK4)C++错误代码中的二阶DE
- 获取有关使用未初始化内存的错误代码
- 排序程序的意外错误代码
- 正在将DJI错误代码记录到流中
- 来自API的错误代码..处理什么是好的做法