J 无穷大的解释

J interpretation of infinities

我很难理解 J 如何解释无穷大,例如 (cos=.2&o.^:_)1 是 0.73908,((^&2)^:_) 2 是 _,但是 ((+&1)^:_) 0 挂了我的电脑而不是回答 _。余弦和幂示例如何工作?

形式 v ^:_ y 将 v 应用于 y 直到没有变化。换句话说,它可以用作收敛测试。

((+&1)^:_) 0 注意。每次执行时加一...慢慢达到无穷大

((^&2)^:_) 2 注意。增加得更快,所以更快地达到 _(无穷大)

(cos=.2&o.^:_)1 注意。收敛

在 J for C programmers 中,Henry Rich 很好地描述了 ^:_ http://www.jsoftware.com/help/jforc/loopless_code_iv_irregular_o.htm#_Toc191734389

您的计算机挂起,因为在最后一次计算达到 _.

之前有很多(例如 很多)步骤

如果保留中间步骤,您可以很容易地看到余弦收敛的速度有多快:

(2&o.^:(<_)) 1
1 0.540302 0.857553 0.65429 ...
#(2&o.^:(<_)) 1
77

仅需 77 步就达到了稳定点。

同样,^&2 增长非常快,因此很快就会达到稳定点 (_):

((^&2)^:(<_)) 2
2 4 16 256 65536 4.29497e9 1.84467e19 3.40282e38 1.15792e77 1.34078e154 _
#((^&2)^:(<_)) 2
11
另一方面,

(+&1) 是一个增长非常缓慢的函数。从0开始,大约要等1e19步,直到达到稳定点;即一个数字 x 容忍地等于 x+1