小数点以下のことについて質問です

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アップルミスト
記事: 21
登録日時: 13年前

小数点以下のことについて質問です

#1

投稿記事 by アップルミスト » 13年前

環境
Windows Vista
DXライブラリ
VisualC++ 2010 Express


基本的なことなのでしょうもないことだと思いますが質問させて頂きます。

小数点以下の細かい数字についてはどのように表記すればよいのでしょうか?
例で

onex+=1     を     onex+=0.1

と表記することでは駄目なのでしょうか?
実際に試してみたところ、この表記では動きません

試しに分数で表現してみたところ、これもやはり正常な動きではありませんでした。

どう書けばいいのか、教えてください。

右に動かしたい画像があり、それを動かそうと思ってもうまくいかないのですが・・・

onexのxが抜けていました。
申し訳ございません。
最後に編集したユーザー アップルミスト on 2012年6月11日(月) 00:10 [ 編集 1 回目 ]

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 小数点以下のことについて質問です

#2

投稿記事 by みけCAT » 13年前

oneの型は何ですか?
「動きません」とは、どのような動作を期待していて、どのように動くということですか?
それともコンパイルさえ通りませんか?

oneがdouble型の時、one+=0.1と書くと、若干の誤差が出ますが、ゲーム程度なら気にしなくていいと思います。
気になるようなら、自分で多倍長計算と分数型クラスを実装するという選択肢があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 小数点以下のことについて質問です

#3

投稿記事 by softya(ソフト屋) » 13年前

int型は扱える値が整数ですから、そのまま少数以下の値を扱うことは出来ません。
floatやdouble型は少数を扱えますが、内部表現で2進法に変換する過程で10進法との間に僅かながら誤差を生じます。
そのため、0に0.1を100回足し時に10にはならないと言う癖があります。これさえ気をつければ足し算する分には問題ありません。
つまりif文でa == 10.0と比較してもイコールには永久にならない可能性があると言うことです。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アップルミスト
記事: 21
登録日時: 13年前

Re: 小数点以下のことについて質問です

#4

投稿記事 by アップルミスト » 13年前

なるほど!

int型でやっていました・・・

遅くにありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る