如何在输出计数平方根上获得更多小数位

时间:2013-11-22 13:40:34

标签: c

原谅我,如果我做错了什么,我是第一次来这里,我的英语不是最好的。另外,我是C的初学者

我们在C中有学校项目,我们必须编写计算平方根的函数。我们不能使用math.h.我已经使它工作,但是输出有问题我不知道如何解决。

我得到了这个:“my_sqrt =?。??????。10e?”例如:“1.414214.10e1”

但我需要得到这个:“my_sqrt =?。???????????。10e ??”ex:“1.4142145678.10e + 01” 我该怎么做?

这是代码:

double fabs(double x) {     //just abs()
    if (x < 0)
        x = -x;
    return x;
}

double my_sqrt(double x) {   //sqrt function
    double y = 1;
    while(fabs(y*y - x) >= 0.00000000001)
        y = ((x/y) + y) / 2;
    k++;
    return y;
}

int main(int argc, char *argv[]) {
    int num;

    sscanf(argv[2], "%d", &num);    // char to int

    if (strcmp(argv[1], "--help") == 0)    // this will just print help
        getHelp();
    if (strcmp(argv[1], "--sqrt") == 0)    // this is for sqrt
        printf("my_sqrt = %f.10e%d", my_sqrt(num), k);

    return 0;
}

非常感谢!

3 个答案:

答案 0 :(得分:0)

我相信您打算使用%.10f(打印带小数点后10位的双精度型)代替%f.10(打印带标准小数位后跟字符串.10的双精度型)在您的格式字符串中。有关详细信息,请参阅http://en.cppreference.com/w/c/io/fprintf

您的代码的另一个问题是此调用:

printf("my_sqrt = %f.10e%d", my_sqrt(num), k);

您希望首先评估my_sqrt(num),以便设置k。但是未指定函数调用的参数的评估顺序。程序可能首先获得k(零)的值,然后评估sqrt调用。

答案 1 :(得分:0)

首先,我想补充一点,我们应该鼓励新来者。并且回答你问的问题......使用%e来表示科学格式的浮动

答案 2 :(得分:0)

使用"%.*e"获取所需的.之后的任意小数位数以及指数表示法。

// printf("my_sqrt = %f.10e%d", my_sqrt(num), k);
// 10 digits after the decimal point
int Digs = 10;
printf("my_sqrt = %.*e %d\n", Digs, my_sqrt(num), k);