質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

Q&A

解決済

2回答

3464閲覧

べき乗を計算するプログラム

likuson

総合スコア34

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Processing

Processingは、オープンソースプロジェクトによるCGのためのプログラミング言語です。Javaをベースにしており、グラフィック機能に特化しています。イメージの生成やアニメーションなど、視覚的なフィードバックを簡単に得ることが可能です。

0グッド

0クリップ

投稿2019/10/12 11:59

前提・実現したいこと

processingでべき乗を計算するプログラムをかいています。具体的には、前提にaのn乗を求めるプログラムです。計算を簡単にする為、もし、nが偶数ならw=a^(n/2)としw×wを計算し、奇数ならw=a^(n-1/2)とし、w×w×aを計算します。

発生している問題・エラーメッセージ

Type mismatch, "float" does not match with "int"

該当のソースコード

processing

1void setup(){ 2 noLoop(); 3} 4void draw(){ 5 int a= 2 , n= 10 ; 6 print(n+"-th power of "+a+" is "); 7 println( power(a,n) ); 8} 9 10int power(int a, int n){ 11 int w; 12 if( n==0 ) return( 1 ); 13 if( (n%2)==0) 14 { w=pow(a,n/2); 15 return( w*w ); } 16 else{ w=pow(a,(n-1)/2); 17 return( w*w*a );} 18}

試したこと

わからないので何もできませんでした。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/10/12 12:13

> Type mismatch, "float" does not match with "int" 翻訳サイトを使って意味を調べては?
likuson

2019/10/12 12:15

調べた結果、floatとintを変えればうまくいくとは思うのですがこの計算はintで計算したいので困っています。
退会済みユーザー

退会済みユーザー

2019/10/12 12:41

intに変換すればいいだけと思いますが・・・
Orlofsky

2019/10/12 14:35

yukke_ さんに座布団1枚。
guest

回答2

0

ベストアンサー

ProcessingはJavaベースなので、整数型の変数に浮動小数点型の値を入れようとする(情報が意図せず欠落することがある)のを許しません。

ですから、

int w; //略 { w=pow(a,n/2); //略 else{ w=pow(a,(n-1)/2);

は、powが浮動小数点型を返し、それを整数型に入れようとするのでエラーになります。


計算を簡単にする為

標準で提供されるような関数は十分に「揉まれて」いて、特別な条件下でなければ小手先の対策で高速になったりはなかなかしません...それで計算が簡単になるかというとちょっと疑問な点がありますが、とにかくその方針で計算するなら、
途中のwは整数の範囲に収まらない可能性があります(aの1/2乗が出てくるので)。wを浮動小数点型にする必要があるでしょう。そうすると、関数の戻りの型がintでここが同様の不整合になりますから、戻す時に
return (int)(w*w);
などと明示的にintに変換してやる必要がでてきます。


ついでに別件と言うか、むしろこちらの方が重要かも知れませんが...
Javaでは(それを利用するProcessingでも)整数同士の演算は整数で閉じています(整数の範囲で計算されます)。1/2は、0.5になることはできず0になります。0.5を得るためには、計算に関与する要素の少なくともひとつを小数表記にします。1.0/2とか1/2.0とか、あるいは1.0/2.0でも構いませんけれど。整数型の変数a,bの間の計算なら、(float)a/b とか。

投稿2019/10/12 23:47

編集2019/10/12 23:55
thkana

総合スコア7629

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

swordone

2019/10/13 03:04

ここでの「2で割る」処理は、いずれも割り切れる状態なので問題にならないかと思います。
guest

0

偶数と奇数で場合分けしていることから、pow()を使いたいのではなく、
再帰でべき乗処理自体を実装したいということでしょうか。
そういうことであれば、二ヶ所あるpowpowerにすればよいだけです。
nが負の値の場合は考慮されていませんが…

投稿2019/10/12 15:16

編集2019/10/12 15:27
SHOMI

総合スコア4079

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問