• 締切済み

JAVAでMath.powを使用せずに、小数を小数で累乗したい

javaでiアプリを作っているのですが、 iアプリの仕様のせいか、Mathクラスの累乗に関係する関数(pow,log,expなど)、 が使用できません。(使用しているDojaのバージョンは5.0) powの仕組みを使って、小数を小数で累乗するプログラムを作成したいのですが、 教えていただけないでしょうか?

  • Java
  • 回答数1
  • ありがとう数0

みんなの回答

  • _ranco_
  • ベストアンサー率58% (126/214)
回答No.1

0.5乗は平方根、0.33333....乗は立方根、0.25乗は4乗根、0.1乗は10乗根、等々ですから、これらを足して近似解を計算します。参考URLを見てください。

参考URL:
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1012890620
ma-tun
質問者

補足

お忙しいなかのご回答ありがとうございます。 回答と参考URLを何度も読んではみたのですが、正直まだ理解できません。 参考URLを見る限りでは、ベストアンサーの回答は、 こちらの質問に書きました「Mathクラスの累乗に関係する関数(pow,log,expなど)が使用できません」と言う条件で使えないのはわかるのですが、 検討ををつけて計算する方も、累乗する値、される値とも一定でないため、検討をつけて計算させるのは困難な状態です。 なので、ニュートンの二項定理を使って・・・の方法のことを指しているものだと思っていますがどうでしょうか? 更なる質問で申し訳ないのですが、二点ほど気になることがありまして。 一点は、 > 「0.5乗は平方根、0.33333....乗は立方根、0.25乗は4乗根、0.1乗は10乗根、等々ですから、これらを足して近似解を計算します。参考URLを見てください。」 の部分が、参考URLのどの回答のどの部分を指しているのかということです。 もう一点は、参考URLのニュートンの二項定理の説明の部分についてなのですが、 > 10^0.3={2^10・(1-24/1024)}^(1/10)=2・(1-3/128)^(1/10) という式があるのですが、なぜこのように変形できるのかのくだりがわかりません。 もし、よろしければこの質問の返答をしていただければ幸いです。

関連するQ&A

  •  Javaでのある数の小数点乗について

     Javaでのある数の小数点乗について  数学での計算をJavaを使って計算している所です。Javaの中でもDoubleを使うのではなく、BIgDecimalクラスを使って計算をしています。しかし、BigDecimalの値をBigDecimal乗するという事は出来ないですよね? Math.powを使えばDouble型のDouble乗は出来ますが…  そこで、任意の精度で小数点の小数点乗を求める方法は無いでしょうか? 必要ないかもしれませんが参考までに 言語:Java OS:MacOS 10.5

    • ベストアンサー
    • Java
  • iAppli JAVA

    Doja4.0を使ってアプリ開発中です。 JAVAで使えるクラスがiAppliで使えなくて結構困ってます。 iAppliで使えるクラスがよくわかるサイトってないでしょうか?

    • ベストアンサー
    • Java
  • SetPixel関数のmath.h

    WindowsXPのノートでVisualC++2008ExpressEditionを使っています。 SetPixel関数で円を描くプログラムで、math.hの問題だと思われる4つのエラーでコンパイルできません。 宣言は #include<windows.h> #include<math.h> ウィンドウプロシージャ内で switch (msg) { case WM_PAINT: hdc = BeginPaint(hWnd, &ps); for (i = a - r;i <= a + r; i++) { x = i; y = (int)sqrt(pow(r, 2) - pow(x - a, 2)) + b;←96行目 SetPixel(hdc, x, y, RGB(0, 0, 0)); y = (int)-sqrt(pow(r, 2) - pow(x - a, 2)) + b;←98行目 1>c:\documents and settings\REI\my documents\visual studio 2008\projects\setpixel01\setpixel01\setpixel01.cpp(96) : error C2668: 'pow' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照) 1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(575): 'long double pow(long double,int)' の可能性があります。 1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(527): または 'float pow(float,int)' 1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(489): または 'double pow(double,int)' 1> 引数リスト '(int, int)' を一致させようとしているとき 同じ内容のエラーが96行目なのが2回、98行目なのが2回出ます。math.hを編集すればいいんでしょうか?gccならコマンドラインから-lmでいいかもしれないんですが。自分の入力ミスはないと思います。 どなたかお分かりになる方、教えていただけないでしょうかm(_ _)m

  • iアプリでの小数計算の誤差

    こんにちは。docomoのiアプリ開発で質問があります。 dojaでは少し前から小数計算が可能になっていますが、double型を使って小数計算をすると、とても激しい誤差がでます。 例えば、  0.3*3 = 0.899999・・・  5*0.78 = 3.9000000000000004 などです。なにか根本的な解決方法はないでしょうか。

  • double型で収まりきれない小数の値を求めたい。

    下記のようなプログラムを作っています。 int num = 1000; double d1 = 12345.6; double d2 = 0.0: for(int i=0;i<num;i++){   d2 += Math.pow(d1,(double)i); } d2の値を求めたいのですが、これをこのまま実行すると、得られる数値が大きすぎてd2の値がInfinityになってしまいます。 小数を格納できる最大の型はdouble型ですよね? それに収まりきらないということは、私の求めたい数値はJavaでは求めることが出来ないのでしょうか? それとも何かInfinityになってしまうのを回避する手段はあるのでしょうか? d2で得られた値はそのまま他の計算式で利用するのでどうしてもすべて小数値でなくてはならないのです。 どなたかお知恵をお貸しください。 よろしくお願いします!!

    • ベストアンサー
    • Java
  • javaで三角波を合成

    javaでbyte配列を使って for(int i=0;i<triangle_wave.length;i++){ double s=0; for(int j=0;j<=2;j++){ double a = (2*j+1)*i*F0*Math.PI*2/Fs;(Math.sin((2*j+1)*i*F0*Math.PI*2/Fs)/(Math.pow((2*j+1),2)))); s += (double)(Math.pow((-1),j)*(Math.sin(a)/(Math.pow((2*j+1),2)))); } triangle_wave[i]= (byte)(110*8*s/(Math.pow(Math.PI,2))); } AudioFormat format = new AudioFormat((float)Fs,16,1,true,false); InputStream bytefile = new ByteArrayInputStream(triangle_wave); File file = new File("test.wav"); AudioInputStream inputstreem = new AudioInputStream(bytefile,format,wave.length); AudioSystem.write(inputstreem,AudioFileFormat.Type.WAVE,file); のような感じで三角波を作ったのですが、これをwavファイルに出力してSonicVisualiserでスペクトルを見ると基本周波数が出てきません。これはどうしてでしょうか? また、量子化ビット数を16から8にするとスペクトルに基本周波数が出てきます。量子化ビット数を2倍にすると周波数も2倍になるということなのでしょうか?

  • 実行結果を倍精度浮動小数点数(double)で表示させたいです

    C言語の勉強をしている大学生です。 プログラミングをしている中で、質問が3つほど出てきました。 互いに関連しているのでまとめて質問させてください。 無限等比級数を計算するプログラムを作成しました。 これをコンパイルして実行すると、double型で定義しているのに 小数点以下7桁となってしまいます。 doubleは15桁ということなので、15桁で出力したいのです。 これが1つめの質問です。 <実行結果> input n:10 1.500000 1.750000 1.875000 1.937500 1.968750 1.984375 1.992188 1.996094 1.998047 pow関数がmath.hに含まれているのかも定かではなく、 インターネットでmath.hというものがあると書いてあったので、 インクルードしてみましたが、これは適切でしょうか? これが2つめの質問です。 最後になりますが、インターネットで多倍長ライブラリというものが あるということを知りましたが、この使用方法がわかれば具体的な例を 挙げながら教えていただきたいと思います。 ------------------------------------------------------------ #include <stdio.h> #include <math.h> int main(void) { int n; int i; double total; printf("input n:"); scanf("%d",&n); if (n<1){ printf("unable\n"); return 0; } for(i=1; i<n; i++){ total += 1.0 / pow(2.0,i); printf("%f\n",total+1.0); } } ------------------------------------------------------------

  • javascriptで浮動小数点の問題

    javascriptで浮動小数点の問題を解決しつつevalをつかった電卓を作ることはできませんか? >>> //-が欲しい場合 var array2 = str.match(/-?[0-9]+\.?[0-9]*/g); for(var i = 0; i < array2.length; i++) { console.log(parseFloat(array2[i])); } な感じで数値を抜き出し 計算記号+-*/に従ってmathのメソッドを順次呼び出す関数を作成すればいいのです。 計算記号については抜き出した数値を文字列として数えれば抜き出せるはず。 このように教えてもらいましたが、正直難しすぎてさっぱりわかりません。 evalでは浮動小数点の問題は解決できないのでしょうか? 便利なライブラリなどもないでしょうか?

  • iアプリの関数(log)について

    関数(log)を計算したいのですが、MathクラスでもFastMathクラスでもうまくいきませんでした。 以下のコードだと「シンボルを解釈処理できません」とメッセージが出てコンパイルできません。何か間違っているのでしょうか。それともDojaではlogをサポートしていないのでしょうか? import com.nttdocomo.ui.*; import com.nttdocomo.ui.util3d.*; public class A extends IApplication { public void start() { float res1; res1 = FastMath.log(0.5); System.out.println("FastMathクラス**********"); System.out.println("log(0.5) = " + res1); double res2; res2 = Math.log(0.5); System.out.println("Mathクラス**********"); System.out.println("log(0.5) = " + res2); } }

    • ベストアンサー
    • Java
  • なぜかうごきません

    #include<stdio.h> #include<math.h> int main() { double x; printf("%10s%10s%10s%15s%20s\n","x","log(x)","sqrt(x)","exp(x)","pow(10.0,x)"); for(x=1.0;x<10.0;x++) printf("%10.5f%10.5f%10.5f%15.5f%20.5f\n",x,log(x),sqrt(x),exp(x),pow(10.0,x)); return 0; } がどうしてもうごきません。 log,sqrt,exp,powが認識されないようです。定数なら大丈夫ですが、for文で変数を走らせると駄目になります。なぜでしょうか?

専門家に質問してみよう