使用循环计算 long double 的幂在 c 中给出了错误的答案

calculating power of long double using loop gives wrong answer in c

int i;
long double y=1,z=10;
for(i=1;i<=100;i++)
{
  y=y*z;
}
  printf("%Lf\n",y);

c 中的代码段给出了输出-> 10000000000000000000617922327239436892408592529019667420405379256132946170093880852611802198127411200.000000

当我尝试像这样初始化它时 y=100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0; 在打印时它没有给出正确的答案。 而不是正确的 ans.please 帮助我。

A 'long double' 没有准确表示 100 位数字的精度。所以您看到的是 'the right answer' - 长双精度数通常为 80 到 128 位,精度约为 20 位以上十进制数字,远不及 100。

long double 的精度是实现定义的,您需要检查您的系统以了解 long double 的精度。但是,10^100 太大了,无法在不丢失精度的情况下存储。

计算机科学中数字的精度各不相同,因为通常您不能用有限的十进制(或二进制)形式表示实数。有两种近似形式表示实数的方法。第一个是定点数,您应该为整数部分分配一些位数,为小数部分分配一些位数。 C中唯一支持的定点数是整数(小数位为0)如果你想要更多,你必须自己管理。

实数的另一个class是浮点数...在这个class中你有相对误差(这取决于数量级或数字有多大,你有误差)所以...以十进制解释,当您有五位尾数时,您将收到 0.00001 * the_number 错误或 0.001 % 错误。

如果你试图将 10^100 表示为一个整数,你将需要大约 300 位来表示这么大的数字,所以用 C 中允许的基本类型(即使是long long long,应该支持的情况下,太小不允许这样的数字)。如果你尝试用正常的 double 类型来表示它,你会得到一个错误(0.000000000000001 % 超过结果的大小,错误)