• ベストアンサー
  • 困ってます

べき乗の計算について

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

共感・応援の気持ちを伝えよう!

  • 回答数4
  • 閲覧数712
  • ありがとう数2

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

  • ベストアンサー
  • 回答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を見つければ良いのです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

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

    テイラーの定理より1近似を求めていますが、解き方が分からない問題が6問あったので途中計算&#65374;答えについて教えてください。お宜しくお願いします。 (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)

  • 商計算の近似式について

    c>>vにおいて、下式 (c-v)/(c+v) ≒ (1 - 2v/c) が、何故そうなるのか分かりません。 どなたかお教えいただければと思います。 ※c>>vのとき、 (c-v)/(c+v)≒(c-v)×(c-v)という近似式は正しいのでしょうか。 あわせてご回答御願いします。

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

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

その他の回答 (3)

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

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 … ですね。 あとは近似の精度に気をつけて下さい。

共感・感謝の気持ちを伝えよう!

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

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

共感・感謝の気持ちを伝えよう!

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

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

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

共感・感謝の気持ちを伝えよう!

関連するQ&A

  • n次近似式とテイラー展開について

    学校で近似式の勉強をしていて、テイラー展開という所まで進みました。 そこでn次近似式との関係について良くわからない事がありましたので質問します。 文章がわかりにくいと思いますがお願いします。 n次近似式は、n番目までの近似でn番目の後にランダウの記号がついています。 テイラー展開はn番目の近似の後にさらに・・・と続いています。 この二つにはどのような違いがあるのでしょうか? あとマクローリン展開はa=0の時のテイラー展開という事はわかりました。 そこで、 f(x)=exp(x)のx=0におけるn次近似式を求めよ。と書いてあった時は、n次近似式とテイラー展開が同じ事を言っているとしたら、マクローリン展開で解いても良いのでしょうか?

  • 近似式

    物理なんかで使う近似式があるのですが、 (質問その1)いったいどこでこの知識を習得されているのでしょうか。 物理の参考書ではいきなり、近似式が出てきますので、不思議に思っております。 例えば、 x《 L  たぶんxはLに比べてはるかに小さい。(と認識していますが) このサイトで (1+x)^a=(1+ax) だということが最近分かりました。これだけでも、感動しています。 (質問その2)それと、一般的によく使う近似式にはどんなのがあるのでしょうか。 宜しくお願いします。

  • 巨大な階乗の桁数を求めるプログラム

    10000!とか、123456!とかの桁数を求めるプログラムを教えて下さい。 スターリングの近似式というキーワードに当たりましたが、n!の値の近似式であって桁数ではないです。

  • エクセルでの検量線作成について

    電位差測定による定量分析でエクセルを使って検量線を作成したいのですが、分かりません。 xを対数軸、yを等分軸にとり片対数グラフを作成して近似式を出したいのですが、グラフが曲線になってしまいます。 近似式はy=aX^-nといった形になりました。 プロットは明らかに右下がりの直線なのですが、近似式を出すと曲線となります。 3点の検量線ですが、この近似式で標準品の濃度を算出すると、かなりの誤差が生じます。 近似式は妥当なのでしょうか? 直線で出す方法はどうすればよいのでしょうか? グラフの設定は累乗近似です。 初心者の質問で申し訳ありませんが、宜しくお願いします。

  • エクセルの近似式について

    どの分野で質問していいかわからなかったので、違う分野でしたらすみません。エクセルでグラフを作り、近似式を導きたいのですが、y=ax1/2 (xの1/2乗)という近似式はできますか。オプションのところで近似式の追加、累乗根の近似をしましが、「何乗」のところが指定できません。よろしくお願いします。

  • 研削加工理論 (接触弧の長さ計算について)

    研削における「平均切りくず断面積」について勉強していますが、 わからない点があり質問させていただきます。 ご回答よろしくお願いいたします。 平均切りくず断面積の算出の際、接触弧の長さの計算が必要となります。この接触弧は近似式であらわされるのですが、 この近似式の求め方がわかりません。 接触弧の長さは以下の近似式であらわされます。   L=√(t/(1/D+1/d)) 但し、L:接触弧の長さ    t:砥石切り込み深さ    D:砥石の直径    d:工作物の直径 いくつかの書籍を調べましたが、 「近似的に L=√(t/(1/D+1/d)) であらわされる」 といった文面ばかりで、この近似式がどのように算出されるのかが わかりません。 ご回答のほどよろしくお願いいたします。

  • 近似式と極限のちがい。

    物理なんかではよく近似式が出てくることが多いように思います。 なぜか微分積分の知識が活用されていない。 ところで、初歩的ですが、 近似式と極限が違うことに最近気づきました。 極限とかは参考書にあるのですが、 近似式はよくわかりません。 なんかむずかしいというイメージをもっています。 物理の参考書にかいてあることがけっこう難解なせいでしょうか。 違いも含めてやさしく説明できる人はいますか。 ちなみに、みたこともないような特殊な記号や公式には弱いです。 けっこう難しい質問だと思いますが宜しくお願いします。

  • 近似式(1+r)^n≒1+nrの由来について。

    1>>rの時、近似式(1+r)^n≒1+nrは有名な式ですが、 私はこの式は2項定理から証明するものだと思っていたので、 nが自然数限定だと思っていたのですが、 今日、参考書でn=-1の時にこの近似式を使っているものを見ました。 そういえばn=1/2などでも使っていたものがあったような気がします。  nがマイナスや分数、あるいは無理数の時、この近似式はどこから導かれているのでしょうか? どなたか分かる方、よろしくお願いします。

  • 近似式の定理で、値 a が値 b に比べて十分小さい場合、a^2 +

    近似式の定理で、値 a が値 b に比べて十分小さい場合、a^2 + b^2 ≒ b^2 という式が成り立つようなのですが、これはどのように導かれるのでしょうか? 近似式に関する情報を探してみましたが、この式についての記載は見当たりませんでした。なお、この式が今年の電験3種(理論)の試験問題を解くために必要な近似式で、ここでひっかかってしまっています。

  • 指数近似を行い、時定数を求める方法

    実験より得られたデータを最小二乗法にて近似を行い、近似式を算出しました。 得られた近似式から、時定数を算出しようと思うのですが、どのような計算を行えばよいかわかりません。 プログラミングにて算出しますので、算出するための具体的な式などあれば教えてもらえれば助かります。