• ベストアンサー

べき乗の計算について

x^0.5  をやりたいのですが ^が実施できないコンパイラを使っています。 x^3 なら x*x*xとすればいいのですが ^0.5の近似式を教えて 欲しいのですが・・

質問者が選んだベストアンサー

  • ベストアンサー
  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.4

√x = x^0.5 は言語によってはsqrt(x), sqr(x), power(x,0.5) などと書かれます。 そういうのがない場合には、数値計算をする関数(functionあるいはprocedure, subroutine, method)を作ってやれば良いですね。 要するに、大抵の言語でコンパイラに作りつけの関数sqrtがやっていることを自分で書けばよい。 ~~~~~~~~~~~~~~~~~~~~~ √xを高い精度で計算するには、漸化式を使うのが速いと思います。 もちろんx<0のときはエラー、x=0なら√x=0です。 x>0のとき、y=√x に近づく近似値の列y[0], y[1], ...., y[k], .... を次々と作り、誤差が小さくなったら終わります。 ●漸化式 適当な出発値y[0]から始めて y[n+1]=y[n]/2+x/(2y[n]) という漸化式でy[1], y[2], ... を作ります。(Newton法) この式は、繰り返しの度に有効桁数が倍になる、「2次収束」という性質を持っているので、出発値y[0]が正解に近ければ、ほんの数回の繰り返しで十分な精度(10進法で10桁以上)に達します。 ●繰り返しを何処で打ち切るかの判断  筋から言うと、正解√xに対する相対誤差 δ δ=|(y[n]^2)/x - 1|/2 が十分小さくなったら打ち切る、ということで良いでしょう。  このδがなぜ相対誤差なのか。近似値y[n]が絶対誤差εを含んでいて y[n]=sqrt(x)+ε であるとすると、 δ=|(y[n]^2)/x - 1|/2 = |(x+2y[n]ε+(ε^2))/x - 1|/2 = |(2ε√x+ε^2)/x |/2 ≒|(2ε√x)/x |/2   (|ε|は小さいのでε^2 は無視できる。) = |(ε/√x | だからです。  幾らなら十分小さくなったと言えるか。これは要求される精度に依存しますが、一般に計算機内部での浮動小数点数値の有効桁数を超えたら、それ以上計算したってしょうがないですね。  これを逆手に取って、   y[n]とy[n+1]が同じになったら打ち切る というやり方もあります。 ●出発値y[0] 出発値y[0]があまりにもでたらめだと、上記の漸化式が旨く働かないことがあります。  y[0]は、数値xの計算機内部での表現を利用すると簡単に決められます。 浮動小数点の数値xは符号部S、仮数部D、指数部Eで表され、たいてい16進法で x = S×D×(16^E) となっている。Eは整数です。 ここで、x≠0の場合には 1>D≧1/16 です。  この問題ではx≠0だし、符号部SはS=1に決まっています。従って √x = √D ×(4^E) ですね。 √D=√(1+(D-1))≒1+(D-1)/2 ≒1 と荒っぽい近似ができます。また Eが偶数の場合には √x = √D ×16^(E/2) Eが奇数の場合には √x = (√D )/4 ×16^((E+1)/2) です。 だから   Eが偶数のとき y[0] = 符号部1 仮数部(1+(D-1)/2) 指数部(E/2)   Eが奇数のとき y[0] = 符号部1 仮数部(1+(D-1)/2)/4 指数部((E+1)/2) とでもすれば良いでしょう。もっと手抜きして   Eが偶数のとき y[0] = 符号部1 仮数部1 指数部(E/2)   Eが奇数のとき y[0] = 符号部1 仮数部1 指数部((E+1)/2) でも大丈夫です。(漸化式の繰り返しが少し増えるだけです。) 内部表現の調べかたが分からない場合には、計算でDとEを出すこともできます。  16^(E-1) < x < 16^(E) となるEを見つければ良いのです。

nami41
質問者

お礼

ごていねいに ありがとうございました。 結局、sqrt関数を手作りでつくることにしました。

その他の回答 (3)

  • guiter
  • ベストアンサー率51% (86/168)
回答No.3

sight さんが仰るように何か関数があるような気はしますが、 どうしても近似が必要であれば次のテイラー展開の結果を使ってください。  (1+x)^α = 1 + (α,1)*x + (α,2)*x^2 + … + (α,n)*x^n + o(x^n) ここで、(α,n) は2項係数でαは自然数でなくてもよいですが n は自然数です。 (通常カッコの中のαと n は縦に並べて書きますが今は横に並べています。) つまり、  (α,n) = α(α-1)…(α-n+1)/n! です。ただし、(α,0)=1 です。 今は、α=1/2 ですから  (1/2,1) = (1/2)/1! = 1/2  (1/2,2) = (1/2)(1/2-1)/2! = -1/8  (1/2,3) = (1/2)(1/2-1)(1/2-2)/3! = 1/16 などになります。 したがって、  (1+x)^0.5 = 1 + x/2 - x^2 /8 + x^3 /16 … と展開できます。ご質問の x^0.5 であれば、x+1 ⇒ x とずらして  x^0.5 = 1 + (x-1)/2 - (x-1)^2 /8 + (x-1)^3 /16 … ですね。 あとは近似の精度に気をつけて下さい。

  • sight
  • ベストアンサー率53% (199/370)
回答No.2

コンパイラ・・・プログラムですか? ^が使えなくても、Cのpow関数みたいに、べき剰を計算してくれる関数はないんでしょうか? pow(x, 0.5)みたいにかけるような・・・・

  • k_eba
  • ベストアンサー率39% (813/2055)
回答No.1

.5乗だけでよいなら ルートを使ってください。 また 参考で色々書いていますよ

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=144106

関連するQ&A

  • べき乗の計算

    べき乗の計算 よろしくお願いします。 ^はべき乗を表して式を書きます。 A^B=(0.001×A)^X となるようにするには、 Xには何が入るのでしょうか? 数学にめちゃくちゃ疎いので、 分かりやすく教えてください。

  • 1次近似式の解き方の途中計算~答えについて

    テイラーの定理より1近似を求めていますが、解き方が分からない問題が6問あったので途中計算~答えについて教えてください。お宜しくお願いします。 (1)f (x) = sin (x)  x = π/3における 1次近似式? (2)f (x) = √x^(1/3)  x = 1 おける 1次近似式? (3)f (x) = ( 1 + x)^4 x = 0における 1次近似式と 1.03^4 の近似値? (4)f (x) = √( 1 + x ) x = 0における 1次近似式と √0.9 の近似値? (5)f (x) = tan (x) x = 0における 1次近似式と tan0.3 の近似値? (6)f (x) = log ( 1 + x ) x = 0における 1次近似式と log1.2 の近似値? 答え (1)1/2x + √3+/2 - π/6 (2) (x /3 )+ (2/3) (3)1 + 4x 近似値(1.12)  (4)1 + (x/2) 近似値(0.95) (5)x 近似値(0.3) (6)x 近似値(0.2)

  • 指数関数の計算について

    とある問題集にてexp(-ln2*(x))の式でxが1より十分小さい時、この式を1-0.693*xと近似できるとのことが書いてあるのですが、どのような変形を行えばこのような式になるのでしょうか?

  • H8 3052 のプログラムで、少数のべき乗計算

    H8 3052 のプログラムで、少数のべき乗計算がしたいです。 y=4610.6x^(-1.156) という計算を入れたいです。 H8 3052 ヘッダファイル 3052f.h stdio.h math.h メイン関数で 1 x2=ad1_val; 2 y2=4610.6*pow(x2,-1.156); 3 if(y2>20){s2_flag = CW;} 4 if(y2<20){s2_flag = CCW;} このプログラムだと動作しません。 1 x2=ad1_val; 2 y2=x2/2; 3 if(y2>150){s2_flag = CW;} 4 if(y2<150){s2_flag = CCW;} このプログラムだと動作しました。 2行目のpowの式のせいで動作エラーするみたいなんですけど、 pow関数はH8 3052 では使えないのですか? それとも他に書き足すことがあるのですか? pow関数が使えないのなら他に方法はないですか? コンパイラは CC38H.exe です。 お願いします。

  • 10のべき乗の計算を教えてください

    某制御機器にて10のX乗(Xは実数)を計算させたいのですが装置の持っている命令には10のX乗は無いため計算式を考えています。使えそうな命令としてはexpとlnが有ります。いい方法を教えてください。

  • VBAで多項式近似曲線の計算

    Excelで求めた近似曲線の値をAccessVBAで変数を当てはめて計算したいのですが、計算がうまくいきません。 近似曲線で求められた式は y = -92.397x2 + 3271.3x + 90679 で、このxにフィールド名を当てはめてUPDATE文を作りたいと思っています。 作った式は -92.397*[フィールド名]^2+3271.3*[フィールド名]+90679 としましたが結果が近似曲線グラフで見られたような答えにはなりませんでした。 色々調べているのですが、何が原因かよくわかりません。 ご回答よろしくお願いいたします。

  • ph計算(水の電離を無視しないで)

    ある濃度の一価の酸のpHを求めよという問題があったとして、 酸の濃度 Cmol/L,電離定数 Kmol/Lが与えられているとすると、 平衡状態において、酸から電離したH+イオンの濃度、水から電離したH+イオンの濃度をそれぞれX,xmol/Lとおくと 電離平衡より (x+X)X/(C-X) = K 水のイオン積より (x+X)x = Kw という方程式が立てられて、x,Xの値が求まり、phもわかりますよね。 これを厳密に解くのは現実的でないのでx+X=Xと近似できるとすると X^2/(C-X) = K Xx = Kw となりこれなら二次方程式を解けば良いだけです。(高校化学の参考書ではこうやって解いてる) しかし実際には近似できないときに近似した後の式を解くとどうなるのでしょうか?例えば実際には近似できないときに、近似後の式の解が近似できるような解であるということはありえるんでしょうか?(方程式が別物になるわけだから) つまりこの問題に限らず P:(近似前の方程式の解が近似できる)⇔Q:(近似後の方程式の解が近似しても良かったような値) なんでしょうか?そもそもP⇒Qであるのかもわかりません。 ほとんど数学っぽいですね笑 高校化学は適当にやれば良いんでしょうか?

  • tanh(x)がx>>1のときの近似式

    tanh(x)がx>>1のときの近似式 tanh(x)がx>>1のとき以下の近似式が成り立つそうなのですが、 どうしてこういう近似式が成り立つのかわかりません。 どなたか教えていただけると助かります。 tanh(x)≒1-2*exp(-2x)

  • 近似値の計算方法について。

    こんにちは、 次の問題を解いていました。 電卓で計算すると0.99.....となるのですが、以下の方法ですると1となってしまいます。 この方法では、間違っているのかどうか分かりません。(間違って理解しているのかも) チェックをお願いします。 なお、小数点以下桁数は、2桁までです。 そのほかの方法では、確かに0.99になりました。 sin(x)≒x (1+a)^n≒1+an           x=0.1radのとき、 __________1__________ の近似値を求める。 √{1+2[sin(x)]^2} (方法)関数は、微小区間では、接線の一次式で近似できるので    X=Oのときの値を求め、さらにそのときの接線の傾きを求めXに0.1を代入して結果を    X=0のときの値に加えて近似値を求める。 (計算)    (上式をf(X)とする。) f(0)=1    接線の傾き=f'(0)=0 ∴f(0.1)=f(0)+接線のdf(x)=1+0=1

  • 偏微分の計算

    xのn次の多項式g(x)でx=0におけるk次の微分係数g^k (0)が、与えられた関数f(x)のk次の微分係数 f^k (0)と同じになるものを求めよ。 また、e^xをx=0の近くで近似するn次の多項式を求めよ。 全然わからないので、わかる方教えてくださいm(__)m