- 此问题已在此处有答案**:
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应该修什么?
2条答案
按热度按时间lf5gs5x21#
如果必须以任意精度处理非常大的数字,而不是使用
float
或double
,请查看任意精度库。一个常见的on称为GMP任意精度库背后的想法与我们人类如何做数学背后的想法相同。一个“数字”只能存储10个可能的值,但通过创建一个数字数组,我们可以生成任意大的值而不会失去准确性。
像这样的库利用数组并一次执行一个数字的数学运算,以保持完美的准确性。它们的运行速度比
float
s或double
s慢**很多 *,但如果你更关心精度而不是速度,那么它绝对是你要走的路。tzdcorbm2#
单精度
float
可以表示任何 * 真实的 * 数字,精度为6位小数。999999982796.800050
超过了这个标准。这个特定的例子可以简单地通过使用
double
来修复,它适用于15位十进制精度。