我试图了解以下内容之间的区别:
printf("%f",4.567f);
printf("%f",4.567);
Run Code Online (Sandbox Code Playgroud)
如何使用f后缀更改/影响输出?
如何使用'f'改变/影响输出?
所述f在一个浮点常数的端确定的类型和可影响值.
4.567是浮点常数的类型和精度double.A double可以代表完全典型的约2 64个不同的值. 4.567他们不是一个人*1.最接近的替代品通常是完全正确
4.56700000000000017053025658242404460906982421875 // best
4.56699999999999928235183688229881227016448974609375 // next best double
Run Code Online (Sandbox Code Playgroud)
4.567f是浮点常数的类型和精度float.A float可以代表完全典型的约2 32个不同的值. 4.567不是他们之一.最接近的替代品通常是完全正确
4.566999912261962890625 // best
4.56700038909912109375 // next best float
Run Code Online (Sandbox Code Playgroud)
当printf()作为...增量的一部分传递时,a float将转换为double具有相同值.
那么问题就在于什么是印刷的预期差异?
printf("%f",4.56700000000000017053025658242404460906982421875);
printf("%f",4.566999912261962890625);
Run Code Online (Sandbox Code Playgroud)
由于打印小数点后的默认位数 "%f"为6,因此两轮的输出为:
4.567000
Run Code Online (Sandbox Code Playgroud)
要查看差异,请更精确地打印或尝试4.567e10, 4.567e10f.
45670000000.000000 // double
45669998592.000000 // float
Run Code Online (Sandbox Code Playgroud)
您的输出可能与实施质量问题略有不同.
*1 C支持许多浮点编码.常见的是binary64.因此,典型的浮点值被编码为符号*二进制分数*2 指数.即使像0.1这样的简单十进制值也不能完全表示.
| 归档时间: |
|
| 查看次数: |
54 次 |
| 最近记录: |