タイトル : Re^11: 塗りつぶし(黒)の円をPC画面中央に配置する 投稿日 : 2015/04/16(Thu) 10:08 投稿者 : 魔界の仮面弁士
> > 今回の場合、最終目標は画面上への描画処理ですから、 > > Decimal ではなく Single を使う方が適切だと思いますよ。 > > ⇒了解しました。ご指導ありがとうございます。 話のついでに、小数を扱う場合の注意点について触れておきます。 たとえば、3 で割った値に 3 をかけなおすケースを考えてみましょう。 Dim dec1 As Decimal = 1D / 3D Dim dec2 As Decimal = dec1 * 3D '0.99999…になる Dim sng1 As Single = 1.0F / 3.0F Dim sng2 As Single = sng1 * 3.0F '1.0 に戻る データ型によって結果が異なってきますね。 これは要するに、0.33333333 + 0.33333333 + 0.33333333 の結果を、 0.99999999 として扱うのが正しいのか、それとも、概数計算として 1/3 + 1/3 + 1/3 ≒ 1.0 とするべきかという考え方の違いであって、 どちらかが間違いというわけではありません。 ただし概数であるがゆえに、浮動小数点型を用いた場合には、 If (0.1R + 0.2R) = 0.3R Then If (1.0F - 0.9F) = 0.1F Then などが False になるといった、分かりにくい現象も発生します。 (Decimal 型であれば一致するのですけれども) そのため、浮動小数点数が等しいかどうかを調べるときは、 等号『=』で判定するのではなく、「その差が十分に小さいかどうか」で 判断することが求められるケースもあります。ご注意ください。 http://dobon.net/vb/dotnet/beginner/floatingpointerror.html > ⇒私は情報処理系の学生ではなく(医療系の学生)、VBは実験機器を作成するために使用しています。 > なので、こういったことの講義は全くうけたことがありません。私のような初心者が上記のようなことを理解 > できるようなお勧めの本がありましたら是非、ご教示して頂けないでしょうか? すみません。自分も独学なのですが、特定の本を読んで…というのは思い当たりません。 ただ小中学生の頃から、プログラミング関連の本はプログラム言語を問わず 図書館で借りまくっていた記憶があります(月に4〜5冊のペース)。 基本的には、BASIC 系の書籍とアルゴリズム関連の書籍を中心に読み漁っていました。 当時はインターネットも無く、書籍が知識の入り口でしたからね…。 大学に入ってから初めて Visual Basic に触れましたが(当時は VB2.0)、 製品に付属していた紙のマニュアルは読破していました。 VB2010の電子マニュアルでいうと、下記のセクションに相当する箇所です。 https://msdn.microsoft.com/ja-jp/library/2x7h1hfk%28vs.100%29.aspx 今にして思えば闇雲な学習法ではありましたが、効率は兎も角として、 当時のそれらが力になっているのだという思いはあります。 読んでみても意味の分からない部分も、一応目を通しておくと、 後々になって、急に理解できるようになることも少なくありませんし。 |