アプリ版:「スタンプのみでお礼する」機能のリリースについて

VBAの勉強をしています。

データ型の値で分からないところがあるので質問させていただきます。

①1.4E-45 って1.4×(10の-45乗)のことでしたっけ? すると、3.4E38 は、3.4×(10の38乗)?

②浮動小数点数型って何? 整数型のように -○○ ~ ○○ のような形ではなくて、(負の値)(正の値)と分けて範囲を定めている意味がよく分からない。そもそも、単精度浮動小数点数型と倍精度浮動小数点数型の違いが分からない。

③整数型の -32,768~32767 の「,」ってただの区切り点ですよね? 1,000円みたいな。なぜ、左は区切り点を入れてて右は入れてないのだろう。ただの本の誤植?

質問が大雑把でいたらぬ点があると思います。いろいろご指摘していただけるとありがたいです。
どうぞよろしくお願いします。

質問者からの補足コメント

  • ①、②は了解しました。VBAで使うときはカンマは不要、覚えておきます。

    http://detail.chiebukuro.yahoo.co.jp/qa/question …
    浮動小数点と固定小数点との違いは単なる小数点の表記の違いなのですね。
    指数乗の数ではどれだけ細かい値まで正確に出せるかが変わってくる。
    単精度と倍精度の違いは、整数型と長整数型が格納できる容量がちがうように、小数点以下の数値がどれだけ換算できるかの容量が変わってくる。

    No.1の回答に寄せられた補足コメントです。 補足日時:2015/02/22 07:00
  • あちこちに書いてすみません。お礼の続きです。

    おかしいな?そうすると0の値は範囲に含まれてない?? 0が含まれない範囲なんておかしいと思いし?まだ理解の仕方が足りないような。。

      補足日時:2015/02/22 07:08
  • 初っ端から、固定長でつまずいてしまいました。「コンピューターで、レコード(数項目からなる一つの処理単位)の長さが一定である形式。処理が簡単で一般的。」レコードって何?? 頑張ってググってみます。のでお時間が許せばもう少しお付き合いください。

    No.3の回答に寄せられた補足コメントです。 補足日時:2015/02/23 06:01

A 回答 (3件)

固定小数点数と浮動小数点数の説明が少しまずいようですね・・・



1.まず,現在のコンピュータの内部表現は全て2進数(0,1)です.
  また,VBAの「数値」の記憶方式は固定長です.

2.固定小数点形式とは,小数点の位置が固定しています.
  ただし,記憶節約のため小数点そのものは記憶データにはありません.
  それにVBAやCでは固定小数点形式のデータは,整数型のみです.
  だから,小数点の位置は右端で小数部は0桁です.
  PL/I言語などでは,整数部Nbit小数部Mbitという形式があります.
  ただし小数点は記憶データの中にはありません.小数点位置は
  コンパイラとプログラマが知っていれば良いのですから.

3.浮動小数点形式は実数を符号,仮数部,指数部に分けて記憶する方式です.
  -0.15625→(2進数)-0.00101→(2進浮動)[符号:-][仮数部:1.01]*2^[指数部:-11]
  として,[符号][指数部][仮数部] と並べた2進数を記憶します.
  ただし,仮数部と指数部の順序や,指数部を下駄はかせ,仮数部を1bitケチ表現,
  などの工夫をして記憶域の節約と大小比較が整数形式と同じになるようにしています.
  ついでに double変数 d=1 (整数型) など単なる代入に見えますが,
  記憶形式の変換を伴いますので時間がかかります.d=1.0 とすべきです.

補足.浮動小数点数は仮数部が有限桁なので有効桁数はもちろん有限ですが,
   仮数部は「2進小数」なので,10進数小数で小数最下位桁が5以外の数は
   正確には表せません.なお,0は,指数部=0…0,仮数部=0…0となってます.

   浮動小数点数は正負対称に表現できますが,
   整数=2進固定小数点数は,2の補数表示という方式を使いますので
   16bitの場合-32768(=1111 1111 1111 1111)~+32767(=0111 1111 1111 1111)
   といったように負の数が1つ多く表現できます.
この回答への補足あり
    • good
    • 1
この回答へのお礼

すみません、期限中に理解ができませんでした。でも何度も読ませてもらってます。
http://oto-suu.seesaa.net/article/204829267.html
分からないところを一つずつ調べています。ありがとうございました。

お礼日時:2015/02/26 05:54

もちろん、0は含まれます。


その書き方は、浮動小数点数が表現できる値のうち、正,負,0 (,それ以外の特別な値)に分けたうちの、正負についてだけ述べているようです。


> 仮数も指数も有限なため、全ての実数を表現できるわけではありません。

と書いたように、コンピュータでの浮動小数点数には、大きさ、精度に限界があります。
そのため、「0の次の値。絶対値の最も小さい値」というものも存在します。
それが例えばSingleなら1.401298E-45 です。これより絶対値が小さい値(例えば 3.0E-50)はSingleでは使えません。

なお、この範囲の値すべてが使えるわけではありません。
仮数が有限なため、それ以上に細かい値は使用できません。精度の範囲に丸められます。
1.4012985432E-45 は > 1.401298E-45 なので、Singleの範囲ですが、精度が範囲外なので、後の5432まで表現できません。
    • good
    • 0
この回答へのお礼

以前にも書いて下さった「仮数も指数も有限」っていう意味がわからなかったのですが、範囲が決まっているということは有限ということなのですね。

浮動小数点の”大きさ”というのは絶対値の一番大きい数字のことで、精度というのは絶対値の一番小さい数字の指数のこと?

例えば、正の範囲が1.23E5~2.34E-5だったとすれば、
  123000.000000~0.000234 が範囲で、仮数の有限範囲はE3で、最小値は0.000234。なので、0.0002339は丸めこまれても使えない。123000.0000009は最大数範囲を超えているので使えないはずだが、仮数の精度はE3なので、それより小さい数字は丸めこまれるので、123000.000000になるので使える。

お礼日時:2015/02/23 05:43

(1) そうです。



(2) http://ja.wikipedia.org/wiki/%E6%B5%AE%E5%8B%95% …

数値を 「仮数 * nの指数乗」 の形にしたデータです。
仮数も指数も有限なため、全ての実数を表現できるわけではありません。
単精度、倍精度とは、仮数や指数をどれくらいにするかの違いです。

その資料にどう書いてあるかわかりませんが、通常は正負で範囲に違いはありません。

(3) そうです。
VBAで使うときは、カンマは不要です。付いていると違う意味になります。
左右でのカンマの有無については、わかりせん。誤植の類でしょう。
この回答への補足あり
    • good
    • 0
この回答へのお礼

文字制限のため全部書けなかったので、補足に書きました。続きです。

正負の問題ですが、たとえばSingleの場合、こう書かれてあります。
 (負の値)-3.402823E38~-1.401298E-45
 (正の値)1.401298E-45~3.402823E38
ややこしいので、理解するために仮に
 (負の値)-1E1~-1E-2
 (正の値)1E-2~1E1  と定めてみる。
   負の値は、-1(10)~-1(0.01) = -10~-0.01
   正の値は、 1(0.01)~1(10) = 0.01~10
 つまり、範囲は-10~10で、浮動小数点はE2まで。

こんな理解で大丈夫でしょうか?

お礼日時:2015/02/22 07:02

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!