Files
bitoj_python/examples/float_validator.cpp

54 lines
1.3 KiB
C++

// 浮点数误差比较验证程序
// 编译: g++ -o float_validator float_validator.cpp
// 使用: ./float_validator input.txt expected.txt result.txt
#include <iostream>
#include <fstream>
#include <cmath>
#include <iomanip>
using namespace std;
const double EPS = 1e-9;
int main(int argc, char* argv[]) {
if (argc != 4) {
cout << "WA" << endl;
return 0;
}
ifstream expected(argv[2]); // 标准答案
ifstream result(argv[3]); // 用户输出
if (!expected.is_open() || !result.is_open()) {
cout << "WA" << endl;
return 0;
}
double exp_val, res_val;
// 读取期望的浮点数
if (!(expected >> exp_val)) {
cout << "WA" << endl;
return 0;
}
// 读取用户输出的浮点数
if (!(result >> res_val)) {
cout << "WA" << endl;
return 0;
}
// 比较数值,允许相对误差和绝对误差
double diff = fabs(exp_val - res_val);
double rel_error = (fabs(exp_val) > EPS) ? diff / fabs(exp_val) : diff;
if (diff <= 1e-6 || rel_error <= 1e-6) { // 放宽误差范围
cout << "AC" << endl;
} else {
cout << "WA" << endl;
}
expected.close();
result.close();
return 0;
}