本人在学习c语言时写了一个高精度小数计算程序,要求输出结果要有小数点后200位,我的代码是这样的
但是在我输入16/19时,输出的结果却是这样的
他只给了我小数点后6位,我不明白自己哪里错了,后来我又在网上找到了正确的代码
这条正确的代码输出确实后面带了200位,相比我的代码又简洁又易懂,但是我还是不明白我的代码到底错在哪里了,我又用草稿纸演算了一遍我的代码,依然没有找到正确的答案,恳请各位点出我的错误
#include
int main() {
int x, y;
scanf_s("%d/%d", &x, &y);
int a;
int i = 0;
double sum = 0;
double c = 0.1;
while (i != 200) {
x *= 10;
a = x / y;
sum += c * a;
c /= 10;
x %= y;
i++;
}
printf("%f", sum);
return 0;
}
double小数点后有效数字最多就6到7位,就是说你sum最多就只能存储小数点后6位或7位,你把sum的输出放在循环外永远也不会超过7位数字啊,应该在你计算出一个因子的时候就要再循环里面输出它,直到你输出了200个数字
double有效数字本来就六七位,你用double保存200位怎么可能?
在循环里输出就好。200位的数字怕是要用字符串做为变量,double不够啊。除非你的系统是128位的,c的环境也是128位系统。不然double没多少位的