为什么计算器我不工作?

时间:2018-04-02 16:07:28

标签: c

我编码的是

#include <stdio.h>
int main(){

    float a, b;

    printf("enter initial value.");
    fflush(stdout);
    scanf("%f", &a);

    printf("add up the following number.");
    fflush(stdout);
    scanf("%f", &b);


    printf("current value is %f.\n", (a+b));
    fflush(stdout);


    b = a+b;

    printf("enter a value to subtract.");
    fflush(stdout);
    scanf("%f", &a);


    printf("current value is %f. \n", b-a);
    fflush(stdout);

    b = b-a;

    printf("enter a value to multiply.");
    fflush(stdout);
    scanf("%f", &a);



    printf("current value is %f. \n", a*b);
    fflush(stdout);

    b = a*b;

    printf("enter a value to devide.");
    fflush(stdout);
    scanf("%f", &a);



    printf("current value is %f. \n", b/a);
    fflush(stdout);



    return 0;
}

输出:

enter initial value. 1000000
add up the following number. 9000000
current value is 10000000.000000.
enter a value to subtract. 0
current value is 10000000.000000. 
enter a value to multiply. 1000000
current value is 10000000000000.000000. 
enter a value to devide. 10
current value is 999999982796.800050. 

https://i.stack.imgur.com/xuqab.png

我想要1000000000000.000000作为结果,但999999982796.800050是我所有.... 我应该修理什么?

2 个答案:

答案 0 :(得分:0)

单精度set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /STACK:10485760")可表示精度为6位十进制数的任何实数数。 float符合该标准。

这个具体的例子可以简单地使用999999982796.800050来修复,这对于15位十进制数字来说是好的。

答案 1 :(得分:0)

如果必须以非常大的数字以任意精度处理数学,而不是使用floatdouble,请查看任意精度库。常见的内容称为GMP

任意精确库背后的想法与我们如何将数学作为人类背后的想法相同。单个“数字”只能存储10个可能的值,但通过创建数字数组,我们可以生成不加区分的大值,而不会丢失准确性。

这样的库利用数组并一次执行一个数字的数学运算,以保持完美的准确性。它们比floatdouble慢了很多,但是如果你更关心精度而不是速度那么它绝对是你要走的路。