A double通常提供16(±1)个十进制数字.您的示例显示了这个:
4 8 12 16
v v v v
0.947368421052631578 long double
0.947368421052631526 double
Run Code Online (Sandbox Code Playgroud)
答案同意16位数.这是应该期待的.另请注意,C标准中无法保证a的long double精度高于a double.
您试图用有限的位数表示每个十进制数.有些事情完全不能用浮点表达.期待与浮点数的确切答案是你的第一个问题.看看每个计算机科学家应该知道的关于浮点算术的内容
以下是一些讲义的摘要:
如前所述,计算机不能精确地表示实数,因为只有有限数量的位用于存储实数.因此,任何具有无穷多位数的数字,例如1/3,平方根2和PI都不能完全表示.而且,由于编码实数的方式,甚至无法精确地表示多个有限数量的数字.