我编码的是
#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是我所有.... 我应该修理什么?
答案 0 :(得分:0)
单精度set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} /STACK:10485760")
可表示精度为6位十进制数的任何实数数。 float
符合该标准。
这个具体的例子可以简单地使用999999982796.800050
来修复,这对于15位十进制数字来说是好的。
答案 1 :(得分:0)
如果必须以非常大的数字以任意精度处理数学,而不是使用float
或double
,请查看任意精度库。常见的内容称为GMP
任意精确库背后的想法与我们如何将数学作为人类背后的想法相同。单个“数字”只能存储10个可能的值,但通过创建数字数组,我们可以生成不加区分的大值,而不会丢失准确性。
这样的库利用数组并一次执行一个数字的数学运算,以保持完美的准确性。它们比float
或double
慢了很多,但是如果你更关心精度而不是速度那么它绝对是你要走的路。