gpt4 book ai didi

c - 如何使用 C 中的循环找到满足 (x - y * sqrt(2016.0))/(y + sqrt(2016.0)) = 2016 的数字

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:46 25 4
gpt4 key购买 nike

我试图找到满足子句 (x - y * √ 2016)/(y + √ 2016) = 2016 的数字。数字 x 和 y 可以是有理数。

这是我已经尝试过的:

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int main() {
int x, y;
for(x = 1; x < 10000; x++) {
for(y = 1; y < 10000; y++) {
if( (x - y * sqrt(2016.0)) / (y + sqrt(2016.0) ) == 2016) {
printf("Numbers are: %d and %d.", x, y);
}
}
}
return 0;
}

最佳答案

使用 float 学和强力搜索来“解决”这个问题在概念上不是一个好主意。这是因为对于 FP 数学舍入误差以非直观的方式传播,因此许多在数学意义上可解的方程没有(精确的)FP 数解。因此,使用 FP 数学来逼近数学方程的解本质上是困难的。

我建议在编程之前简化问题。

如果这样做并且只搜索整数解决方案,您会发现唯一的解决方案是

x = -2016^2 = -4064256
y = -2016

为什么:只需重新排列一下即可获得

x = 2016*y + (2016 + y)*sqrt(2016)

由于 sqrt(2016) 不是整数,因此 sqrt 之前的子句中的项必须为零。其他一切都由此而来。

如果需要非整数解,可以使用上面的方法找到每个 y 的 x。它甚至列举了所有的解决方案。

因此,这表明在计算机中尝试解决数学问题之前,通常必须对数学问题进行简化(尤其是 FP 数学)。

编辑:如果您寻找有理数,可以应用与整数情况相同的参数。由于 sqrt(2016) 不是有理数,y 也必须是 -2016。所以对于有理数情况,唯一的解决方案与整数相同,即

x = -2016^2 = -4064256
y = -2016

关于c - 如何使用 C 中的循环找到满足 (x - y * sqrt(2016.0))/(y + sqrt(2016.0)) = 2016 的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46809791/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com