gpt4 book ai didi

c - 打印时我的 float 有多余的数字

转载 作者:行者123 更新时间:2023-11-30 14:23:14 27 4
gpt4 key购买 nike

我将 float 定义为 floattransparency = 0.85f; 在下一行中,我将其传递给函数 -- fcn_name(transparency) --但事实证明,变量 transparency 的值为 0.850000002,当我使用默认设置打印它时,它是 0.850000002。对于值 0.65f,它是 0.649999998

如何避免这个问题?我知道 float 只是一个近似值,但是如果我定义一个只有几个小数的 float ,我如何确保它不会改变?

最佳答案

以二进制格式表示的浮点值没有任何特定的十进制精度。仅仅因为您在某些规范中读到该数字可以代表一些固定数量的十进制数字,它并没有多大意义。它只是将物理(且有意义的)二进制精度粗略转换为其意义不大的十进制近似值。

二进制浮点格式的一个特性是它只能精确地(在其尾数宽度的限制内)表示可以表示为 2 的幂(包括 2 的负幂)的有限和的数字。 0.50.250.75(十进制)等数字将以二进制浮点格式精确表示,因为这些数字要么是 2 的幂(2^-1, 2^-2) 或其总和。

同时,像十进制0.1这样的数字不能用2的有限幂和来表示。十进制0.1在浮点二进制中的表示有无限长。这立即意味着 0.1 无法以有限二进制浮点格式精确表示。请注意,0.1 只有一位小数。然而,这个数字仍然不具有代表性。这说明用十进制数字表示浮点精度并不是很有用。

示例中的 0.850.65 等值也是不可表示的,这就是为什么在转换为有限二进制浮点格式后您会看到这些值失真的原因。实际上,您必须习惯这样一个事实:您在日常生活中遇到的大多数小数十进制数都无法用二进制浮点类型精确表示,无论这些浮点类型有多大 .

关于c - 打印时我的 float 有多余的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13039609/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com