当前位置:  开发笔记 > 开发工具 > 正文

预定义的squareroot函数,不使用C中的math.h中的sqrt()

如何解决《预定义的squareroot函数,不使用C中的math.h中的sqrt()》经验,为你挑选了1个好方法。

作业问题:

Cygwin GNU GDB

Cygwin GNU GCC

试图从A的幂2和B的2的平方根确定斜边 C 的长度.

输入示例:

输入直角三角形两边的长度:2.25 8.33

回答:

斜边的长度为:8.628523

问:当我指定与上面相同的输入时,结果不一样 - 输出为19.84.9596

完整代码如下:

float squareRoots(float *s)
{
    float cx;
    float nx;
    float e;

    cx = 1;
    nx = (cx +*s/cx)/2;
    e = nx - cx;
    cx = nx;

    if (e*e > 0.001)
    {
        nx = (cx +*s/cx)/2;
        return nx;
    } else {
        return nx;
    }
}

float hypotenuse(float *a, float *b)
{
    float c;
    //raise a to power of 2
    *a = (*a * *a);
    *b = (*b * *b);
    //add a and b
    float y = *a + *b;
    c = squareRoots(&y);

    return c;
}


int main()
{
    float x,y;

    printf("Enter the length of two sides of a right-angled triangle:");
    scanf("%f %f", &x, &y);
    float k=hypotenuse(&x,&y);

    printf("The length of the hypotenuse is: %f", k);

    exit(0);
}

Bill the Liz.. 6

您(应该是?)使用的平方根算法称为牛顿方法.你的if语句应该是while循环.

更换

if (e*e > 0.001)
{
        nx = (cx +*s/cx)/2;
        return nx;
} else {
        return nx;
}

使用while循环迭代地执行相同操作,但包括重新计算e.

我会给你工作代码,但你说这是功课.如果您无法使用它,请发布您的新代码,我们将很乐意帮助您排除故障.



1> Bill the Liz..:

您(应该是?)使用的平方根算法称为牛顿方法.你的if语句应该是while循环.

更换

if (e*e > 0.001)
{
        nx = (cx +*s/cx)/2;
        return nx;
} else {
        return nx;
}

使用while循环迭代地执行相同操作,但包括重新计算e.

我会给你工作代码,但你说这是功课.如果您无法使用它,请发布您的新代码,我们将很乐意帮助您排除故障.

推荐阅读
勤奋的瞌睡猪_715
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有