Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C代码未按预期运行_C - Fatal编程技术网

C代码未按预期运行

C代码未按预期运行,c,C,我编写了一个简单的c程序,用牛顿-拉斐逊迭代法求2,3,4,5的平方根。此代码仅用于查找和显示2的平方根。然后它就挂了。我无法找出此代码的问题: # include<stdio.h> float square(float x); float absolutevalue(float x); int main(void) { printf("square root of 2 is %f\n", square(2)); printf("square ro

我编写了一个简单的c程序,用牛顿-拉斐逊迭代法求2,3,4,5的平方根。此代码仅用于查找和显示2的平方根。然后它就挂了。我无法找出此代码的问题:

# include<stdio.h>

    float square(float x);
    float absolutevalue(float x);

int main(void)
{
    printf("square root of 2 is %f\n", square(2));
    printf("square root of 3 is %f\n", square(3));
    printf("square root of 4 is %f\n", square(4));
    printf("square root of 5 is %f\n", square(5));

    return 0;
}

float square(float x)
{
    float epsilon = 0.0000001;
    float guess = 1;

    while (absolutevalue(guess*guess - x) >= epsilon)
        guess = ((x/guess) + guess) / 2;

    return guess;
}

float absolutevalue(float x)
{
    if (x < 0)
        x = -x;

    return x;
}
#包括
浮动正方形(浮动x);
浮动绝对值(浮动x);
内部主(空)
{
printf(“2的平方根是%f\n”,平方(2));
printf(“3的平方根是%f\n”,平方(3));
printf(“4的平方根是%f\n”,平方(4));
printf(“5的平方根是%f\n”,平方(5));
返回0;
}
浮动正方形(浮动x)
{
浮点数ε=0.0000001;
浮点猜测=1;
while(绝对值(guess*guess-x)>=epsilon)
猜测=((x/猜测)+猜测)/2;
返回猜测;
}
浮动绝对值(浮动x)
{
if(x<0)
x=-x;
返回x;
}

如果将
float
替换为
double
随处可见。

square
与外部链接一起使用时是保留标识符您的epsilon太小,float类型没有足够的有效数字。用double替换所有float以快速修复。查看,在循环中打印
guess
的值,您可以很容易地看到问题。可能是因为您输入了一个称为未定义的区域Behavior@JensGustedt:OP问了一个具体的问题,即为什么代码在看到2的平方根后立即挂起。