- PR -

C#で小数を累乗したい

投稿者投稿内容
未記入
常連さん
会議室デビュー日: 2006/05/30
投稿数: 23
投稿日時: 2006-10-06 10:23
いつもお世話になってます。

現在、VS2005のC#を使用して開発をしております。

掲題のとおり、少数を累乗する関数を探しています。

Math.Powを使用しても期待している結果が取得できず、困っています。

どなたか小数を累乗できる関数をご存知の方、よろしければ是非ご教授お願い致します。
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2006-10-06 10:32
引用:

紅椿さんの書き込み (2006-10-06 10:23) より:
Math.Powを使用しても期待している結果が取得できず、困っています。
どなたか小数を累乗できる関数をご存知の方、よろしければ是非ご教授お願い致します。


通常はMath.Powを使います。どのようなパラメータを与えて、どのような結果が得られ、望む結果とどのように違うのかを教えてくれないとアドバイス出来ないと思いませんか?

#いっそループの中でn乗回掛け算しますか?
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2006-10-06 10:38
Math.Powの問題じゃなくてdoubleの精度の問題じゃないの?
もちろん検証した上でMath.Powが使えないと言ってるんだよね?
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-10-06 10:40
引用:

紅椿さんの書き込み (2006-10-06 10:23) より:
Math.Powを使用しても期待している結果が取得できず、困っています。


double型で扱っているので、誤差が出ちゃっているとかそういうことでしょうか?

類似スレ:[教えて!goo] C#の型について(doubleとdecimal)
未記入
常連さん
会議室デビュー日: 2006/05/30
投稿数: 23
投稿日時: 2006-10-06 13:49
レス有難うございます。

int i = Math.Pow(0.8, count) // ここでcountには2が入っているとします。

期待している結果は 0.8 * 0.8 = 0.64

現在上記のロジックで取得できる結果は1.25となっています。

なぜこのような現象が起きるかわからずに苦心しております。何か解決方法等ございますでしょうか?
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-10-06 14:00
引用:

紅椿さんの書き込み (2006-10-06 13:49) より:

int i = Math.Pow(0.8, count) // ここでcountには2が入っているとします。

期待している結果は 0.8 * 0.8 = 0.64

現在上記のロジックで取得できる結果は1.25となっています。

なぜこのような現象が起きるかわからずに苦心しております。何か解決方法等ございますでしょうか?


テスト用に新規プロジェクトで試してみても同じ結果でしょうか?
私が試したところ、0.64にきちんとなりましたよ。
それと、Math.Powの結果は double型ですので int型で受け取らないほうがいいです。

MSDN System.Math.Pow
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-10-06 14:01
引用:

紅椿さんの書き込み (2006-10-06 13:49) より:

int i = Math.Pow(0.8, count) // ここでcountには2が入っているとします。
期待している結果は 0.8 * 0.8 = 0.64
現在上記のロジックで取得できる結果は1.25となっています。


i の型は int であるのに、結果は '1.25' になるのですか?
結果が小数になること自体おかしいですよね。

これでは、"countには2が入っているとします" にも、
誤りがあるのではないかと感じてしまいます。

もっと明確に 「ミニマム テスト」 をしましょう。

コード:

    double d = System.Math.Pow(0.8, 2);
    MessageBox.Show(d.ToString());


これで再現しないようであれば、ただのミスだと思います。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
べる
ぬし
会議室デビュー日: 2003/09/20
投稿数: 1093
投稿日時: 2006-10-06 16:08
Math.Pow(0.8, -1)
が1.25なので-1が入ってると思ってデバッグしてみるといいかも

スキルアップ/キャリアアップ(JOB@IT)