Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Math F#求uInt64的根_Math_F# - Fatal编程技术网

Math F#求uInt64的根

Math F#求uInt64的根,math,f#,Math,F#,如何在F#中求a uInt64的平方根 我试过: sqrt(1UL)//类型“uint64”不支持运算符“sqrt” //及 1UL**0.5//类型“uint64”不支持运算符“Pow” 可以使用pown进行整数指数运算,但替换sqrt不起作用,因为幂只能是int pown 4 2//16 如果只需要平方根的整数部分,最好是为它定义自己的函数。对于您的情况(使用无符号长值),它可以如下所示: let rec sqrtul n = if n <= 0UL then 0UL els

如何在F#中求a uInt64的平方根

我试过:

sqrt(1UL)//类型“uint64”不支持运算符“sqrt”
//及
1UL**0.5//类型“uint64”不支持运算符“Pow”
可以使用
pown
进行整数指数运算,但替换
sqrt
不起作用,因为幂只能是int

pown 4 2//16

如果只需要平方根的整数部分,最好是为它定义自己的函数。对于您的情况(使用无符号长值),它可以如下所示:

let rec sqrtul n =
    if n <= 0UL then 0UL else
        let r2 = (sqrtul (n >>> 2)) <<< 1
        let r3 = r2 + 1UL
        if n < r3 * r3 then r2 else r3
可在线找到替代实现

如果您的目标是在所选类型允许的范围内获得完整的十进制值,则必须首先转换初始值。例如,如果需要浮点结果,请执行以下操作:

sqrt (float 1UL)

当我开始研究十进制sqrt算法时,我找到了一些答案。十进制允许任意精度,因此您可以将其用于任何数字类型

解决方案1:通过迭代控制精度()

让itrSqrt n maxIter=
让我们猜猜g i=
匹配
|0->g
|猜((g+(n/g))/2M)(i-1)
猜测(n/2M)最大值;;
解决方案2:带ε的控制精度(表示迭代之间的变化)()

让dSqrt(d:decimal)(epsilon:decimal):decimal=
让我们猜猜前面的=
如果前一个=0米,则为0米
其他的
让电流=(先前+d/先前)/2M
如果(abs(先前-当前)
为什么不直接转换为
双精度
?请在发布之前考虑一下您的问题。您很快就会发现,您也不能取
int
的平方根。这也会直接引出一个问题:
int
int64
的平方根是什么类型的?你希望它的行为如何?@charlesrodie我不是函数式程序员,所以我可能看不到你在说什么,但我绝对希望能够找到int的根。例如,
sqrt(4)=2
sqrt(3)=1.73…
。我希望它的行为像数学函数一样,我输入一个数字,然后输出一个数字,而不必显式地键入everything@NicoSchertler如果我没弄错的话,double是有符号的64位数字,uInt64是无符号的64位数字。因此,我认为uInt64可能无法正确地转换为double。当你说“我希望它的行为与数学函数类似”时,你所说的“数学函数”是什么类型的:即域和codomain.Hmm是什么。我在找完整的十进制值。我发现输入和输出类型必须相同很有趣。遗憾的是,铸造测试确实给我带来了精度问题。正因为如此,我不太愿意把它作为答案,但是如果你需要更高的精度,
decimal
而不是
float
double
可能是最好的选择。可悲的是,decimal不支持sqrt,但是我发现了一个针对decimal的sqrt实现
sqrt (float 1UL)