好的,我有两个函数,第一个看起来像这样:
let dlth x = float (x.ToString().Length)
它采用浮点数并返回位数,该部分工作正常。第二个函数如下所示:
let droot x = ((x ** (1./(dlth x))) % 1.)
它采用浮点数并将其提高到等于 1.0/(位数)的幂,然后取结果并进行模数 1.0。整数应该为零。
所以对于 droot 36. 它需要 (36.0 ** (1.0/2.0)) 这是 6.0 然后 6.0 mod 1.0 等于 0.0;
现在,直到我尝试数字 81.0 为止,它都可以正常工作。(以及所有高于 81 的数字都应该起作用)由于某种原因返回 1.0,从而放弃了我的模式匹配。谁能告诉我为什么会这样?
PostScript:这是 Project Euler 解决方案的一部分。如果您知道哪个问题,请不要发布 Project Euler 解决方案。我只需要帮助弄清楚为什么模数会返回有趣的结果