C语言 为什么我做的计算器不工作?[副本]

qncylg1j  于 2023-10-16  发布在  其他
关注(0)|答案(2)|浏览(113)
    • 此问题已在此处有答案**:

Is floating point math broken?(33答案)
五年前就关门了。
我编码的是

#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
我想要10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000应该修什么?

lf5gs5x2

lf5gs5x21#

如果必须以任意精度处理非常大的数字,而不是使用floatdouble,请查看任意精度库。一个常见的on称为GMP
任意精度库背后的想法与我们人类如何做数学背后的想法相同。一个“数字”只能存储10个可能的值,但通过创建一个数字数组,我们可以生成任意大的值而不会失去准确性。
像这样的库利用数组并一次执行一个数字的数学运算,以保持完美的准确性。它们的运行速度比float s或double s慢**很多 *,但如果你更关心精度而不是速度,那么它绝对是你要走的路。

tzdcorbm

tzdcorbm2#

单精度float可以表示任何 * 真实的 * 数字,精度为6位小数。999999982796.800050超过了这个标准。
这个特定的例子可以简单地通过使用double来修复,它适用于15位十进制精度。

相关问题