所以在做一些Project Euler问题时,我希望能够取整数值(int、long、bigint 等)的平方根,但 Sqrt 只为浮点值定义。所以我一直在编写自己的小牛顿-拉夫森算法,它对我的需要非常准确。但是,我希望能够在浮点值上调用内置的 sqrt 函数。所以我写了这样的东西:
let inline dsqrt x =
match box x with
| :? float -> sqrt x
| :? float32 -> sqrt x
| _ -> p_dsqrt x
显然,我的函数被命名为“p_dsqrt”。然而,这个函数要求输入定义了一个 Sqrt 方法,这有点违背了整个目的。我错过了一些类型约束,还是什么?