在Ruby(1.9)中,数字总是被认为是确切的吗?我知道Ruby做了一些相当复杂的事情,因为你可以做一些疯狂的事情,比如要求1万亿到1万亿的力量,你会得到一个答案(在等待多个卫星计算之后)。
在Scheme中,规范的一部分规定实现应该指示实现的数字的内部表示是否“精确”。例如,1/2总是精确的,1/3是精确的,0.3333是精确的等等。但是对精确数字的不精确数学运算的结果可能产生一个Scheme实现知道不精确的数字(由于浮动点精度)。
(exact? (/ 0.33333 2))
=> #f
这是假的,所以不准确。
有没有办法在Ruby中推断出相同的信息?如果我总是在数学运算期间使用数字的Complex
(或Rational
)表示,那么它总是在Ruby中是否完全正确,或者只是非常接近精确?
Complex("0.33333") / 2
这是否确切?
答案 0 :(得分:5)
Ruby的班级Float
是not exact。另一方面,班级Integer
或多或少“是”,因为它从Fixnum
无缝转换为Bignum
>> 1.4534346345235236346363574564356435
=> 1.45343463452352
>> 10**400
=> 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
>> 10.0**400
=> Infinity
看起来其他人会喜欢看到您要问的测试,即Numeric#exact?
- 请参阅此feature request。