int i;
long double y=1,z=10;
for(i=1;i<=100;i++)
{
y=y*z;
}
printf("%Lf\n",y);
c中的代码段给出输出 - &gt; 10000000000000000000617922327239436892408592529019667420405379256132946170093880852611802198127411200.000000
此外,当我尝试像这样初始化它 Y = 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0; 在印刷它没有给出正确的ans。 而不是正确的ans.please帮助我。
答案 0 :(得分:4)
'long double'没有准确表示100位数字的精度。所以你所看到的是“正确的答案” - 长双打通常是80到128位,精度大约是20+左右的十进制数字,远不及100。
答案 1 :(得分:1)
long double的精度是实现定义的,你需要检查你的系统的long double精度。但是,10 ^ 100太大而无法存储而不会失去精度。
答案 2 :(得分:0)
计算机科学中数字的精确度不同,通常你不能用十进制(或二进制)形式的有限表示来表示实数。有两种表示近似形式的实数的方法。第一个是定点数,你需要整数部分的一些位和一些小数部分。 C中唯一支持的定点数是整数(0小数位)如果你想要更多,你必须自己管理。
另一类实数是浮点数...在这个类中你有相对误差(它取决于数量的大小或数量,你有的错误)所以......用十进制解释,当你尾数有五位数,您会收到0.00001 * the_number
错误或0.001 %
错误。
如果你试图将10^100
表示为一个整数,那么你需要大约300位代表这么大的数字,所以用C中允许的基本类型完全不可能(即使是{{ 1}},它应该被支持的情况,太小而不允许这样的数字)。如果您尝试使用正常的long long long
类型进行表示,则会出现错误(double
超过结果的大小,错误)