目前我正尝试使用CUDA打印出一个方程的答案。
这个方程是(x+y)^2 / xy
我得到的输出的一个例子是在这个image附件。
__global__ void proof() {
int x = 1;
int y = 1;
int multi_number = 1000;
while (true) {
long eq = ((pow(x + y, 2)) / (x * y));
if (y >= multi_number) {
if (x >= multi_number) {
printf("\nProof is true for all cases.");
break;
}
}
if (x >= multi_number) {
x = 1;
y = y + 1;
}
printf("\nEquation being used: (%d", x);
printf("+%d", y);
printf(")^2 / %d", x);
printf("*%d", y);
printf(" >= 4");
printf("\n%d", eq); // printing the equations answer
if (eq < 4) {
printf("\nProof Failed: %d", x);
printf(", %d", y);
break;
}
x = x + 1;
}
}
我目前尝试用多种不同的方式重写方程,但没有成功。
对于未通过的测试(55+55)^2 / 5555,我希望打印4而不是3。
正确答案的示例为(1+1)^2 / 11 = 4
2条答案
按热度按时间gudnpqoy1#
总而言之,
pow()
(至少在CUDA设备代码中)在使用截断时不具备您需要/期望的准确性,我刚刚在这里回答了一个非常类似的问题。失败的原因是
((pow(x + y, 2)) / (x * y))
的结果(在点(55,55)处求值)不像您所期望的那样是4,当通过截断转换为long
值时,它是3。根据我的测试,您可以通过更改以下行来解决这个问题:
改为:
myzjeezk2#
试试这个代码