用于计算维基百科中数字的第n个根的算法

时间:2015-05-31 22:40:15

标签: c

下面的代码有什么问题? 我正在尝试编写一个程序来计算数字的第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);
}

1 个答案:

答案 0 :(得分:1)

您必须:

  1. ans2等式写为ans2 = (1.0/n)*((n-1.0)*ans+(A/pow));
  2. n声明为双倍。
  3. 按照编写方式,编译器会将1/n解释为有符号整数。在整数形式中,1只是:

    00000000000000000000000000000001
    

    因此,当你将它除以任何正整数n > 1时,它会恰好将最低有效位移到最后,导致结果被截断为0。