2021年4月17日土曜日

HP Prime CASの計算の数値範囲

HP PrimeのCASは色々と楽しく、ネットで見掛けた問題を幾つか解くのに使ってみました。

1. x^sqrt(x) = x*sqrt(x)

Can you solve this rational equation ?

cf. https://www.t-3.com/thinking/brilliant-orgs-brilliant-crm/

CASで

fsolve(x^sqrt(x)=x*sqrt(x), x)


と入力します。すると、一度、こんな警告が出ますが、

ENTERキーを押して送ると、[1, 2,25] と、答えを返します。ウマイッ !

2. x! = (7!)! / 7!

what is x ?

cf. https://sites.google.com/a/g.coppellisd.com/coppell-ib-math/math-sl/topics---sl/probability/counting-principles

これは、すんなりと解けるものではなく、別に色々とやって答が判明していたので、その検証に使おうとしました。

答は x=5039 となるらしい。PCで動くmaximaで手当たりしだいに試し結果を得たですが、検証をHP PrimeのCASで出来ないか、試した次第。

(7!)!/7!-5039!
    undef

所が ... 計算できまへん。undefとなってしまいます、アカン。

では、何処までの階乗が計算できるのか、調べてみました。どうも、1006! までは計算できますが、1007! になるとお手上げです。ウーム。

ちなみに、1006! がどんな数値なのか、そこを見ておこうと思います。
整数では結果が得られますが、結構桁数があります。浮動小数点表記だと、どうなるのか ?

HP Primeの浮動小数点表示は、10 E 500 以上でエラー、もしくは Inf となります。1006! は、この範囲にはないでしょう。そこで、対数を取って階乗を計算し、それを浮動小数点表記にする、という作業を行います。

log(1006!) の計算
ΣLIST(MAKELIST(LOG(X),X,1,1006,1))  Shift+ENTER (概数計算の入力)
    2585.61374471
これより、1006! = 4.10908107239 E 2585 と概算されます。
(10^0.61374471 = 4.10908107239 ですネ)

log(1007!) の計算
ΣLIST(MAKELIST(LOG(X),X,1,1007,1))  Shift+ENTER
    2588.616774418
これより、1007! = 4.13784463462 E 2588 と概算されます。

浮動小数点数は10E500まででしたが、整数は、この程度まで計算してくれる模様。
そこで、限界を調べるべく、電卓のキー (実際にはシミュレータのボタン)を叩きまくり、つぎの様な値までは扱えるらしい事が判りました。
3605227827*10^2579 = 3.605227827 E 2588
そして、この整数は、おそらく2進数integerで内部的に保持しているであろうから、何ビットで表現できるのか、と考えてみました。

2を底とする対数を取ったりしてみると、2^8599 が3.605 E 2588 に近い値となる様子。
HP Prime CASでは、2^8599以上の整数値は扱えないらしい、と考えられます。

所が、こんな結果が !
s=2^8598
    1802613913 ... 2262841344 (途中省略の表記です)
s*s
    undef
ここまでは当然ですネ。
s=2^8597
    9013069568 ... 1131420672
s+s
    1802613913 ... 2262841344
s*4
    undef
2進数的に1桁落として加算します。ここも十分理解できます。
s+s+s+s
    3605227828 ... 4525682688

ムムッ !? コレはオカシイ、undefにならんじゃないの !!


調子に乗って、64回加算を行いましたが、一応結果が得られました。
加算の処理が簡易だからなのか、回数を増やしても、ある程度ならば計算してくれる様です。

こんな具合で、整数の場合、3.6 E 2588 程度まで計算してくれる事が判りました。
欲を書くと、もっと長い桁数の整数計算が出来ると良かったのですが、普通の関数電卓では、ここまで扱えないのが当たり前なので、コレ以上の計算の需要はPCの利用を、という事ですネ、ハイ。


0 件のコメント: