c++ - 在 C/C++ 中使用 %f 确定 float 的输出(打印)

标签 c++ c math floating-point

我已经在 SO 中进行了关于 float 的早期讨论,但这并没有阐明我的问题,我知道这个浮点问题在每个论坛中可能都很常见,但我的问题不关心浮点运算或比较。我比较好奇它用%f表示和输出。

问题很简单:“如何确定的确切输出:

float = <Some_Value>f;     
printf("%f \n",<Float_Variable>);

让我们考虑这个代码片段:

float f = 43.2f,
f1 = 23.7f,
f2 = 58.89f,
f3 = 0.7f;

printf("f1 = %f\n",f);
printf("f2 = %f\n",f1);
printf("f3 = %f\n",f2);
printf("f4 = %f\n",f3);

输出:

f1 = 43.200001
f2 = 23.700001
f3 = 58.889999
f4 = 0.700000

我知道 %f(意味着 double )的默认精度为 6,我也知道问题(在这种情况下)可以通过使用 double 来解决,但我对输出很好奇 f2 = 23.700001f3 = 58.889999 float 。

编辑:我知道不能精确表示 float ,但是获取最接近的可表示值的规则是什么?

谢谢,

最佳答案

假设您谈论的是 IEEE 754 float ,它的精度为 24 位二进制数字:以二进制(精确)表示数字并将数字四舍五入到第 24 位最重要的数字。结果将是最接近的 float 。

比如23.7用二进制表示就是

10111.1011001100110011001100110011...

四舍五入后你会得到

10111.1011001100110011010

小数点是

23.700000762939453125

四舍五入到小数点后第六位

23.700001

这正是您的 printf 的输出。

关于c++ - 在 C/C++ 中使用 %f 确定 float 的输出(打印),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1851442/

相关文章:

c++ - 是否有可能为 *IN* KD 树中的节点找到 KNN?

c++ - boost::asio::io_service 优先级如何工作?

c - 在二维数组中插入两个新行

将字符串递归转换为整数 - C 编程

javascript - 在设定时间内从零增加到数字

c++ - 如何将 IAudioClient3 (WASAPI) 与实时工作队列 API 一起使用

c++ - 根据执行时间清理对象池

c++ - ARM NEON : How to convert from uint8x16_t to uint8x8x2_t?

python - Matlab 或 Octave 怎么会这么快?

math - 有哪些好的刚体动力学引用资料?