这与问题1555相关,但问题中的类型不同,所以根本问题可能也不同。
当你使用`10000`作为除数而不是`1e4`时,`rem`似乎返回非常不正确的结果。注意这里的大差异。
user> (rem 9037601485536036300227801N 10000)
7801N
user> (long (rem 9037601485536036300227801N 1e4))
1073741824
test.check
提供了一个更紧密的示例,清楚地显示了不正确的结果。
user> (rem 9007199254740993N 2)
1N
user> (rem 9007199254740993N 2.0)
0.0
这里有一个生成测试来再现这种结果
(clojure.test.check/quick-check
100 (prop/for-all [l gen/size-bounded-bigint
r (gen/fmap inc gen/nat)]
(== (rem l (double r))
(rem l (long r)))))