我在理解J如何解释无穷大方面遇到了一些困难,例如(cos=.2&o.^:_)1
是0.73908而((^&2)^:_) 2
是_,但是((+&1)^:_) 0
挂了我的电脑而不是回答_。余弦和功率示例如何工作?
答案 0 :(得分:3)
您的计算机挂起,因为在最后一次计算达到_
之前,有很多步骤(例如 A LOT )。
如果你保留中间步骤,你可以很容易地看到余弦收敛的速度:
(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
答案 1 :(得分:2)
v ^:_ y
形式将v应用于y,直到没有变化为止。换句话说,它可以用作收敛测试。
((+&1)^:_) 0
NB。每次执行时都会添加一个......慢慢达到无穷大
((^&2)^:_) 2
NB。增加得更快,所以得到_(无穷大)更快
(cos=.2&o.^:_)1
NB。收敛
在J for C程序员中,Henry Rich很好地描述了^:_的用法 http://www.jsoftware.com/help/jforc/loopless_code_iv_irregular_o.htm#_Toc191734389