根据the docs,Ruby Float是一个使用本机架构的双精度浮点表示的"不精确的实数。"
这是否意味着在32位Ruby上它们相当于C float
和64位Ruby相当于C double
?
如果是,我如何在运行时找出运行程序的Ruby(确切地说有多少位)?它应该适用于任何操作系统和任何Ruby实现(mri ruby,rubinius和jruby)。
我提出的解决方案:
def architecture_bits
1.size * 8
end
这在所有情况下都有效吗?是否有更好/更优雅的方法?
答案 0 :(得分:4)
单精度/双精度浮点数的大小与您是否正在运行ruby的64/32位实现无关,因此您的实现将在任何32位ruby实现上返回错误的答案。 / p>
Float定义了诸如Float::MANT_DIG
和Float::MAX_EXP
之类的常量,您可以从中导出浮点数所使用的存储量。虽然它不是一个ieee 754双精度(53位尾数(其中存储了52个),1位符号,11位指数),这是非常罕见的