簡體   English   中英

在J中,如何找到平方根的擴展精度整數層

[英]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│
└──┴────────┘

“J for C Programmers:32”

關鍵是成語<。@ v(或>。@ v),其中v是您要應用的動詞。 當您編碼<。@ v時,解釋器知道您只對結果的整數部分感興趣,並且如果操作數是精確精度,則解釋器將精確地計算結果的整數部分。

所以,你必須使用<.@%: ::

rt2 =: 3 :'(y - root ^ 2);(root =. <.@%: y)'
rt2 99999999999999x
┌────────┬───────┐
│19999998│9999999│
└────────┴───────┘

另請參見字典 - 擴展和Rational算術

<。@ f和>。@ f在應用於擴展整數參數時產生擴展的整數結果。

這似乎有效:

sqrt=: <.@%:
sqrt 99999999999999x

有關詳細信息,請參閱http://www.jsoftware.com/help/jforc/elementary_mathematics_in_j.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM