| tb020 | データの格納形式 | 
数値データを記憶させる場合、いくつかのタイプ(storage type)が選択できます。その選択によって表現できる数値データの精度が変わってくると共に、メモリ占有量も変化することになります。
 
generateコマンドのダイアログに見られるように、データの格納形式には複数の種類があります。

今、データの形式を数値データに限ることにすれば、選択肢は次のとおりです。
| byte | 1バイト単位のデータ | 
| int | 2バイトの整数データ | 
| long | 4バイトの整数データ | 
| float | 4バイトの単精度浮動小数データ | 
| double | 8バイトの倍精度浮動小数データ | 
generateで変数を生成する場合にはfloatがデフォルトとなります。
 
今、Data Editorを使って0.1, 0.2, 0.3という3つのデータを含む変数dataを作成してみます。
. list data

この変数data中に0.1というデータがいくつあるかをカウントしてみます。
. count if data == 0.1
  0
予想に反して0という結果が返ってきたわけですが、これには事情があります。0.1という数値は2進法で表現した場合、無限小数となるわけですが、データセット上には4バイトの浮動小数形式floatで記録されています。一方、data == 0.1という比較などの内部演算にはすべて8バイトの倍精度浮動小数形式doubleが用いられます。このため丸め誤差の影響により、0.1に合致するデータは存在しないという判断に至ってしまったわけです。
この問題はfloat()という関数を用いることによって解決を図ることができます。
. count if data == float(0.1)
  1
| = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = | 
© 2018 Math工房