• ベストアンサー

Objective-Cで累乗根

X÷Y(X/Y)のn累乗根に絡んだ計算をプログラミングをしようと下記のようにプログラムしたのですが、結果が0となりうまくいきません。アドバイスでも良いので、ご回答お願い致します。 float Z = pow(X / Y, 1 / n) -1*100; //計算結果 NSString *ZStr = [ NSString stringWithFormat: @"%f", Z ]; //計算結果書き出し P.text = [NSString stringWithFormat:@"%.3f",Z];

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

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.1

計算結果が0.0001以下だということはありませんか? P.text = [NSString stringWithFormat:@"%f",Z]; // 「.3」を外して、精度指定を廃止する。 これで確認を。精度指定を外すと、「%f」は、小数点以下6桁まで出力します。 ※関数「pow()」は、引数、返り値ともにdoble型なので、「float Z」に代入するのはもったいないです。doubleの変換指定記号は、「%lf」(エル・エフ)です。

takahi6
質問者

お礼

アドバイスありがとうございます。 精度指定を廃止してみたのですが、0.00000になってしまいました。 そこで、X、Y、n、Zをアドバイスのとおりdouble型にしてみたら、正しい計算結果が出ました。 それと、すぐに回答をいただいたことに感謝しております。

その他の回答 (1)

  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

float Z = pow(X / Y, 1.0 / n) -1*100; ――とか。nがintならですが。

takahi6
質問者

お礼

アドバイスありがとうございます。 試してみたのですが、結果は同じ0になってしまいました。 しかし、すぐに回答をいただいたことに感謝しております。

関連するQ&A

  • 累乗 累乗根 同値性 その2

    累乗と累乗根の同値性について前回質問させて頂きました。 前回の質問内容:http://okwave.jp/qa/q7768635.html 前回、ご回答頂いた内容で、 >指数を実数の範囲にして同値性を保ちたいなら、 >x,y を正数だけに制限しておくのが安全です。 と教えて頂きました。 y=x^pにおいて無理数乗や、無理数乗根を考える場合はx,yは正数とすれば 同値性は保たれる理由はどうしてでしょうか? 指数が偶数の場合に、同値性が崩れると理解しています。 無理数は偶数ではないから、同値性が崩れることはないと考えているのですが そんなに単純ではないのでしょうか? x,yが正数でない場合(x,yが負の数)は同値性は保たれないのでしょうか? 以上、ご回答よろしくお願い致します。

  • 累乗根と指数

    お恥ずかしいことですが、指数や累乗根の辺りがまったく分かりません。急に学ぶことになったのですが、ついていけません・・・。 どなたか、分数乗の扱い方についてご存知の方いらっしゃいますか? (3^√-1331)(X^2/9)^-3(1/X^-1/3)  ↑立方根                   ↑-1/3乗 という式の場合、一体どのように手をつけていいのか。 また、 (X^1/3・Y^1/2)^-2 などの場合はどのようにしたらいいでしょうか? どなたか回答よろしくお願いいたします。

  • C言語におけるtxtファイルの読み込みと出力

    環境:WinXP,Borland C++compiler 以下のようなプログラムを考えました。 ・sample.c #include <stdio.h> float func(float x,float y,float z); int main(void) { float x,y,z; scanf("%f",&x); scanf("%f",&y); scanf("%f",&z); printf("%f",func(x,y,z)); return 0; } float func(float x,float y,float z) { return x+y+z; }//ここまで。 例えば(x,y,z)=(1,2,3)と入力すると6が出力されます。 このプログラムを、任意のn組の(x,y,z)の記述されたテキストファイルを読み込んで出力outを計算し、別のテキストファイルにn組の(x,y,z,out)を書き込むようにするにはどのような変更を加えればよいのでしょうか。 具体例は以下のような感じです。用意しておいたinput.txtをsample.cで読み込んで計算し、また作成されていないoutput.txtに出力するのが目標です。 (n=3の場合) ・input.txt //x y z 1 2 3 1 8 9 -1 7 5 ・output.txt //x y z out 1 2 3 6 1 8 9 18 -1 7 5 11

  • 計算量の少ないn乗根の求め方

    現在C++であるクラスのインスタンスaのN乗根を求める関数を作成中なのですが、どうしても実行時間が長くなってしまいます。 現在ニュートン法に則って X(m+1)=((N-1)(Xm)^N+a)/(N*(Xm)^(N-1)) という漸化式を回して変化量が一定値以下になったら終了という関数なのですが、 値によっては累乗計算のところで時間を大幅にロスしてしまうようです。 原因としては累乗計算が同じ数をN回掛けるという単純な仕組みなため、 Nが大きすぎるとループがなかなか終わらないということがわかっています。 もしご存知であれば 1.極力累乗計算を使わないN乗根の求め方 2.計算量の少ない累乗計算の仕方 のどちらかを教えていただけないでしょうか? なお、クラスを使っている関係上powなどの既存の関数は使えません。 よろしくお願いいたします。

  • 高校数学 累乗根のうちの奇数乗根について

    教えて下さい。 累乗根の計算でa>0,b>0のとき、  (ab)^(1/n)=a^(1/n)×b^(1/n) とありますが、nが奇数のときはa>0,b>0の条件は不要でしょうか。 例えは、a>0,b<0のとき、  (ab)^(1/n)=a^(1/n)×b^(1/n) としても正しいのでしょうか。 宜しくお願いします。

  • C言語 累乗の計算

    プログラミングの課題が出たのですが どうしても解けない問題が2問あったのでここで質問させてもらいます。 尚、私が書けた範囲で書いているので 根本的な間違えがありましたらご指摘ください。 「□」の部分がわかりません。 (1)任意の整数nを入力して4^nを計算するプログラミングを完成させよ #include <stdio.h> main(){ int i,n,x; i=1;x=1; printf("n="); schanf("%d",&n); while(i<=□){         x=4*□; i++; } printf("Answer=%d\n",x); } (2)e^xをテーラー展開したときのx^nの項の係数を求めるプログラミングを書け。 #include <stdio.h> main(){ int i,n; float x; printf("Input Nunber"); scanf("%d",&n); x=0 for(i=1;i<=n;i++){ x=□*x; } x=1/□; purintf("Answer%f\n",x); } 回答をお待ちしております。

  • 累乗計算 パソコン

    パソコンで累乗を計算させたいときどうすればいいでしょうか 例えば y=x*0.333→y*3=xのような計算をさせたいときどうすればよいでしょうか

  • 指数関数 と 累乗根(無理関数)

    こんにちは。指数関数に関する質問です。 「aを1でない正の定数とするとき、Y=a^xを、aを底とする指数関数という。」という定義が本に記載されていました。そこで質問ですが、Y=X^aの場合は累乗根[←数II](又は無理関数[←数III])という名前がついているようですが、これは指数関数に含まれないのでしょうか? ※質問は、指数関数と無理関数(又は累乗根)との関連です。  別ものなのでしょうか、それとも包含関係があるのでしょうか? よろしくお願いします。

  • プログラミング言語がわかる方に質問します。

    「直角三角形の斜辺を求めるプログラミングをつくれ」ということでプログラミングをしたのですが、 sqrtの使い方がわからずに挫折して、教科書に書いてあったものを入力してみたのですが、 どうも実行してもうまく結果が出ないようです。 以下、教科書の丸写しなのですが、どこがおかしいか指摘していただければありがたいです。 ------------------------------------------------------------------------------ #include <stdio.h> #include <math.h> main() { double x,y,z; puts("直角三角形の斜辺を求めます。"); printf("底辺->"); scanf("%1f",&x); printf("高さ->"); scanf("%1f",&y); z = sqrt (pow(x,2) +pow(y,2) ); printf("斜辺 %.2f\n",z); } ------------------------------------------------------------------------------ 実行結果 直角三角形の斜辺を求めます。 底辺->3 高さ->4 斜辺 0.00←ここが5.00にならなければおかしいのですが、どうしても0.00になってしまいます。 回答の程をよろしくお願いします。

  • C言語の実数型の足し算

    C言語初心者です。関数の勉強していて、実数型計算に出くわしました。 #include <stdio.h> float add(float a, float b) { return a+b; } int main(void) { float x=10.5,y=20.3; printf("%f %f\n",x,y); printf("%f\n",add(x,y)); return 0; } としたら、 10.500000 20.299999 30.799999 という結果になりました。今のところint型でずーっと勉強していたので、20.3の20.299999表記が怪しく感じられ、結果も同様に怪しく感じられます。どうして、10.5+20.3=30.8とすっっきり表示してくれないのでしょうか。

専門家に質問してみよう