下面的代码有什么问题? 我正在尝试编写一个程序来计算数字的第n个根,但是我写的计算结果却一直回到0.我只是把数字放进来看看我是否会得到一个结果计算并将其分配给ans2,但只分配了0。
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void main(){
int n = 2;
double A = 4.0, ans = 1.0, ans2 = 1.0, pow = 1.0;
ans2 = (1/n)*((n-1)*ans+(A/pow));
printf("\n%lf\n", ans2);
printf("\n%lf\n", ans);
printf("\n%lf\n", pow);
printf("\n%lf\n", A);
printf("\n%d\n", n);
}
答案 0 :(得分:1)
您必须:
ans2
等式写为ans2 = (1.0/n)*((n-1.0)*ans+(A/pow));
n
声明为双倍。按照编写方式,编译器会将1/n
解释为有符号整数。在整数形式中,1
只是:
00000000000000000000000000000001
因此,当你将它除以任何正整数n > 1
时,它会恰好将最低有效位移到最后,导致结果被截断为0。