如何找出Ruby中Float的大小?

时间:2014-11-08 08:21:22

标签: ruby floating-point double

根据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

这在所有情况下都有效吗?是否有更好/更优雅的方法?

1 个答案:

答案 0 :(得分:4)

单精度/双精度浮点数的大小与您是否正在运行ruby的64/32位实现无关,因此您的实现将在任何32位ruby实现上返回错误的答案。 / p>

Float定义了诸如Float::MANT_DIGFloat::MAX_EXP之类的常量,您可以从中导出浮点数所使用的存储量。虽然它不是一个ieee 754双精度(53位尾数(其中存储了52个),1位符号,11位指数),这是非常罕见的