基本上,它要求等腰三角形,其中三角形的高度等于基数+ - 1.在纸上做一些数学运算后,我使用以下两个方程中的任何一个来计算长度 L 给出 b :
L = sqrt(1.25b 2 + 2b + 1),用b + 1取代h
或
L = sqrt(1.25b 2 - 2b + 1),用b - 1取代h
我的以下代码使用这两个等式从 b 计算 L 。我总结了所有的 L 值,但它一直给我错误的答案。
#include <iostream>
#include <cmath>
int main(int argc, char* argv[]) {
int result = 0;
int count = 0;
for (int b = 1; count < 12; b++) {
double x;
double L = std::sqrt(1.25*b*b + 2*b + 1);
if (std::modf(L, &x) == 0.0) {
std::cout << count << ": b=" << b << ", L=" << (int)L << "\n";
result = result + L;
count++;
}
L = std::sqrt(1.25*b*b - 2*b + 1);
if (count != 12 && std::modf(L, &x) == 0.0) {
std::cout << count << ": b=" << b << ", L=" << (int)L << "\n";
result = result + L;
count++;
}
}
std::cout << "Solution: " << result;
std::cin.get();
return 0;
}
我做错了什么?我想提示不是解决方案......我觉得这应该给我正确答案。
答案 0 :(得分:0)
这是一个数值精度不足的情况。我只是复制了你的代码,并根据我是使用64位(double
)还是80位(long double
)算法得到了不同的答案。当然,出于同样的原因,80位答案可能仍然是错误的......你必须使用精确(整数)算法才能100%确定(并避免溢出)。