[英]In J, how can I find the extended precision integer floor of a square root
我理解當我取一個不產生整數的數字的平方根( %:
:)時,我的答案是浮點數。 我想找到平方根的底面( <.
)以獲得整數結果。 J有內置的方法來實現這一目標嗎? 我是否需要求助於循環才能找到答案?
拋出幾個擴展精度( x:
:)請求肯定不會這樣做。
rootanddiffa =: 3 : '(y - root ^ 2);(root =. <. %: y)'
rootanddiffa 24
┌─┬─┐
│8│4│
└─┴─┘
rootanddiffa 26
┌─┬─┐
│1│5│
└─┴─┘
rootanddiffa 99999999999999x
┌──┬────────┐
│_1│10000000│
└──┴────────┘
rootanddiffb =: 3 : '(y - root ^ 2);(root =. x: <. x: %: y)'
rootanddiffb 24
┌─┬─┐
│8│4│
└─┴─┘
rootanddiffb 99999999999999x
┌──┬────────┐
│_1│10000000│
└──┴────────┘
關鍵是成語<。@ v(或>。@ v),其中v是您要應用的動詞。 當您編碼<。@ v時,解釋器知道您只對結果的整數部分感興趣,並且如果操作數是精確精度,則解釋器將精確地計算結果的整數部分。
所以,你必須使用<.@%:
::
rt2 =: 3 :'(y - root ^ 2);(root =. <.@%: y)'
rt2 99999999999999x
┌────────┬───────┐
│19999998│9999999│
└────────┴───────┘
<。@ f和>。@ f在應用於擴展整數參數時產生擴展的整數結果。
這似乎有效:
sqrt=: <.@%:
sqrt 99999999999999x
有關詳細信息,請參閱http://www.jsoftware.com/help/jforc/elementary_mathematics_in_j.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.