Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Haskell 什么';787有什么特别的吗?_Haskell_Integer Arithmetic - Fatal编程技术网

Haskell 什么';787有什么特别的吗?

Haskell 什么';787有什么特别的吗?,haskell,integer-arithmetic,Haskell,Integer Arithmetic,在ghci中,使用包: 五分钟后,它仍然没有响应。为什么要花这么长时间 (从一些特别的测试中,对于大于787的所有选择,它似乎都很慢,对于较小的所有选择,它似乎都很快。)通过获得初始近似根并使用牛顿方法细化其猜测来实现算术运算。对于(1032)786,第二个近似值有一个非常好的起点: > appKthRoot 786 ((10^32)^786) 100000000000000005366162204393472 对于(1032)787,第二个近似得到了一个非常糟糕的起点。真的很糟糕 它实

在ghci中,使用包:

五分钟后,它仍然没有响应。为什么要花这么长时间

(从一些特别的测试中,对于大于787的所有选择,它似乎都很慢,对于较小的所有选择,它似乎都很快。)

通过获得初始近似根并使用牛顿方法细化其猜测来实现算术运算。对于(1032)786,第二个近似值有一个非常好的起点:

> appKthRoot 786 ((10^32)^786)
100000000000000005366162204393472
对于(1032)787,第二个近似得到了一个非常糟糕的起点。真的很糟糕

它实际上得到了从这里开始的一切的近似值

> length $ nub [appKthRoot x ((10^32)^x) | x <- [787..1000]]
1
再看看scaleFloat中的内容:

> let h = 106; k = 786; n = (10^32)^k; !(I# s) = h * k - k in fromInteger (n `shiftRInteger` s) ** (1/fromIntegral k) :: Double
2.465190328815662

> let h = 106; k = 787; n = (10^32)^k; !(I# s) = h * k - k in fromInteger (n `shiftRInteger` s) ** (1/fromIntegral k) :: Double
Infinity

是的,就这样。(1032)786÷282530和大约;21023.1可安装在双人床上,但(1032)787÷282635左右;21024.4没有。

当我在Mac OS 10.12.5上使用最新的arithmoi版本和GHCi版本8.0.1,并使用
:set+s
选项运行此程序时,会出现分段错误。没有
:设置+s
我得到“总线错误:10”。似乎这个
integerRoot
函数使记忆的行为非常奇怪。这确实令人沮丧。我之所以有这些大的
Integer
s(我使用算术运算的部分原因)首先是因为我非常努力地避免
Double
。@DanielWagner:是的,我试图弄清楚为什么它们不仅仅是按(h)的比例缩放− 1) k。过一会儿可能会有修复。@DanielWagner:例如,
let!a(I#a#)=1024 ;;h=106;k=787;n=(10^32)^k!(I#s)=h*k-k在地板上(scaleFloat 105(from integer(n`shiftRInteger`(s+#a#))**(1/from integral k)*2**(from integral a/k)::Double))
得到了一个合理的近似值,您可以根据需要继续向上缩放
a
。也许值得为他提出一个问题。
> length $ nub [appKthRoot x ((10^32)^x) | x <- [787..1000]]
1
> let h = 106; k = 786; n = (10^32)^k; !(I# s) = h * k - k in floor (scaleFloat (h - 1) (fromInteger (n `shiftRInteger` s) ** (1/fromIntegral k) :: Double))
100000000000000005366162204393472

> let h = 106; k = 787; n = (10^32)^k; !(I# s) = h * k - k in floor (scaleFloat (h - 1) (fromInteger (n `shiftRInteger` s) ** (1/fromIntegral k) :: Double))
179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216
> let h = 106; k = 786; n = (10^32)^k; !(I# s) = h * k - k in fromInteger (n `shiftRInteger` s) ** (1/fromIntegral k) :: Double
2.465190328815662

> let h = 106; k = 787; n = (10^32)^k; !(I# s) = h * k - k in fromInteger (n `shiftRInteger` s) ** (1/fromIntegral k) :: Double
Infinity