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