在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]
Posted
技术标签:
【中文标题】在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]【英文标题】:float data type(5.0) being assigned 8 bytes rather that 4 using sizeof operator in C [duplicate] 【发布时间】:2017-08-21 08:27:18 【问题描述】:为什么 sizeof(5.0)
返回 8 作为其输出而不是 4,因为我的机器为 float
数据类型分配了 4 个字节?
默认情况下是否将5.0
视为double
(分配的内存= 8 个字节),如果是,那么为什么会这样?
【问题讨论】:
why sizeof(13.33) is 8 bytes? 【参考方案1】:是的。
N1570(最新 C11 草案),§6.4.4.2 p4:
无后缀的浮动常量的类型为
double
。如果以字母f
或F
为后缀,则具有 输入float
。如果以字母l
或L
为后缀,则其类型为long double
。
至于您的“为什么”问题,在实践中,float
由于其精度非常有限而很少有用,所以这个默认值“有意义”。如果您没有充分的理由(例如非常有限的内存限制),请不要使用float
。如果你真的需要一个float
常量,写5.0f
。
【讨论】:
有趣的是,虽然我们认为float
的精度有限,但有几个机器学习应用程序float
也太大(并且占用太多空间以防万一)巨大的矩阵),因此他们正在寻找半精度。【参考方案2】:
因为所有浮点文字默认为double
。如果您希望它是 float
,请使用 f
后缀,如 5.0f
。
阅读例如this floating point constant (literal) reference 了解更多信息。
【讨论】:
以上是关于在 C 中使用 sizeof 运算符分配浮点数据类型(5.0)而不是 4 个字节 [重复]的主要内容,如果未能解决你的问题,请参考以下文章