为了账号安全,请及时绑定邮箱和手机立即绑定

固定大小的浮点类型

固定大小的浮点类型

C++ C
白猪掌柜的 2019-09-03 16:24:38
在stdint.h(C99),boost / cstdint.hpp和cstdint(C ++ 0x)头文件中,除其他外,还有类型int32_t。是否有类似的固定大小浮点类型?有点像float32_t?
查看完整描述

3 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

目前在C或C ++标准中不存在这样的情况。事实上,甚至根本没有保证float二进制浮点格式。

一些编译器保证该float类型将是IEEE-754 32位二进制格式。有些人没有。实际上,float实际上single大多数非嵌入式平台上都是 IEEE-754 类型,尽管有些编译器以更广泛的格式评估表达式的常见警告适用。

有一个工作组正在讨论为2008版IEEE-754添加C语言绑定,可以考虑建议添加这样的typedef。如果将它添加到C中,我希望C ++标准最终会效仿。


查看完整回答
反对 回复 2019-09-03
?
慕哥9229398

TA贡献1877条经验 获得超6个赞

如果您想知道您float的IEEE 是否为32位,请检查std::numeric_limits<float>::is_iec559。它是编译时常量,而不是函数。

如果你想要更加防弹,还要检查std::numeric_limits<float>::digits以确保它们不会偷偷地使用IEEE标准的双精度float。它应该是24。

说到long double这一点,更重要的是要检查,digits因为有几种IEEE格式可能是合理的:128位(数字= 113)或80位(数字= 64)。

这样做是不切实际的,float32_t因为您通常希望使用浮点硬件(如果可用),而不是依赖于软件实现。


查看完整回答
反对 回复 2019-09-03
?
子衿沉夜

TA贡献1828条经验 获得超3个赞

如果你认为像float32_t和float64_t这样的typedef由于任何原因都是不切实际的,你必须习惯于熟悉的操作系统,编译器,以至于你无法看到你的小窝之外。

存在本机运行32位IEEE浮点运算的硬件和其他运行64位的硬件。有时这样的系统甚至不得不互相交谈,在这种情况下,知道每个平台上的双精度是32位还是64位是非常重要的。如果32位平台基于另一个64位值进行过多计算,我们可能希望根据时序和速度要求转换为较低的精度。

我个人觉得使用浮子和双打感觉不舒服,除非我确切知道他们在我的平台上有多少位。如果我通过某些通信渠道将这些转移到另一个平台,那就更是如此了。


查看完整回答
反对 回复 2019-09-03
  • 3 回答
  • 0 关注
  • 844 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信