tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル 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

今にして思えば闇雲な学習法ではありましたが、効率は兎も角として、
当時のそれらが力になっているのだという思いはあります。
読んでみても意味の分からない部分も、一応目を通しておくと、
後々になって、急に理解できるようになることも少なくありませんし。

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。