データ型
変数や値には、データの種類に応じて、いくつかの型が存在します。ここでは、VCSSLで扱えるデータ型を紹介します。
スポンサーリンク
データ型とは
プログラム内のデータには、変数に格納されているものや、式の中などに直接記述されている値も含めて、いくつかの種類があります。 この種類の事をデータ型と言います。 VCSSLの変数では、格納する値のデータ型は宣言時に決める必要があり、その後は変えられません( いわゆる静的型付けです )。
データ型によって、それぞれ扱える種類の値と、扱えない種類の値があります。また、行える演算にも違いがあります。例えば整数を扱うint型で文字列は扱えません。また、文字列を扱うstring型を用いて四則演算はできません。 従って、変数を宣言する際は、扱う値の種類に適したデータ型を選んで宣言しておく必要があります。
VCSSLでサポートされているデータ型には、以下のようなものがあります。
型 | 扱える値 | 容量 | 詳細 |
---|---|---|---|
string | 文字列 | 任意長 | 文字列を格納するためのデータ型です。 |
int または long |
整数 | 64bit 18桁程度 |
整数を扱うためのデータ型です。処理に64bitの2進法が適用されるので、高速な計算が可能です。 |
float または double |
小数 | 64bit 15桁程度 |
小数を扱うためのデータ型です。処理に64bitの2進法が適用されるので、高速な計算が可能です。精度はあまり良くなく、計算する度に、末尾の数桁に計算誤差が生じます。 |
complex | 複素数 | float × 2値 |
複素数を扱うためのデータ型です。float 型の実数値と虚数値を持ちます。 |
varint | 任意桁 の整数 |
任意桁数 | 整数を扱うためのデータ型です。非常に高精度な計算方法が適用されるので、どこまでも長い桁数を扱う事ができます。反面、int型よりも処理速度は数十倍以上遅くなります。 |
varfloat | 任意桁 の小数 |
任意桁数 | 小数を扱うためのデータ型です。非常に高精度な計算方法が適用されるので、どこまでも長い桁数を扱う事ができます。反面、float型よりも処理速度は数十倍以上遅くなります。 |
varcomplex | 任意桁 の複素数 |
varfloat × 2値 |
複素数を扱うためのデータ型です。varfloat型の実数値と虚数値を持ちます。 |
bool | 真偽値 true / false |
二択 | 条件判定などの結果を扱うためのデータ型です。値のtrueとfalseの意味は、そのままYESとNOと解釈しても差し支えないでしょう。 |
struct | 構造体 | - | 任意の型・個数の変数をまとめて扱う型です。 |
整数型を利用する
例として、整数を格納できるint型の変数を使用してみましょう:
- 実行結果 -
このプログラムを実行すると、VCSSLコンソールに「 1 」と表示されます。
ところで、int型の変数に、整数以外のものを代入すると、 どうなるのでしょうか。以下のようなプログラムを実行してみてください:
- 実行結果 -
このプログラムを実行すると、VCSSLコンソールに「 2 」が表示されます。つまり、代入された「2.883」の小数点以下を切り捨て、無理矢理に整数に変換して代入された事がわかります。 このように、変数は、自分の型では扱えない値が代入されると、自分が扱える値に変換してから受け取ります。
このようなルールを「暗黙の型変換」と呼びます。 なお、変換不能な値が代入された場合は、エラーが出力され、プログラムが強制終了されます。
さて、小数(実数、浮動小数点数)を扱うには、本来ならdouble型またはfloat型を使用すべきです。それには以下のように記述にします:
- 実行結果 -
このプログラムを実行すると、VCSSLコンソールに「 2.883 」と正しく表示されます。
キャスト演算(明示的な型変換)
上の例において、整数型に小数値を代入すると、無理矢理に整数へと変換される事を述べました。 このような変換は、以下のように、任意の場所で明示的に行う事もできます:
- 実行結果 -
このプログラムを実行すると、VCSSLコンソールに「 2 」と表示されます。
このプログラムの「 (int) 」の部分に着目してください。 このようにデータ型をカッコで囲んだ記述の事をキャスト演算子と呼びます。 キャスト演算子は、すぐ右側の値を、任意の型へ強制的に変換する演算子です。 上の例では、「2.883」を強制的に整数へ変換し、「2」にしたのです。
複素数型を使用する
続いて、複素数を格納できるcomplex 型を使用してみましょう:
- 実行結果 -
このプログラムを実行すると、VCSSL コンソールに「 (1.0,2.0) 」と表示されます。
ここで「 I 」は、虚数単位の値をもつ変数(定数)で、システムによって自動的に定義されています。
小数に I を乗算すると虚数になります。上の例での値は数学的に 1 + 2 i に相当します。
なお、複素数型の実部や虚部を取得するには、 re 関数と im 関数を使用します:
- 実行結果 -
このプログラムを実行すると、VCSSL コンソールに「 1.0 」 と表示されます。これはc の実部です。
re 関数の代わりにim 関数を使用すると、コンソールにはc の虚部である「 2.0 」が表示されます。
可変精度変数を使用する
小数には、有限精度のdouble型 またはfloat型の他にも、任意の精度を持つvarfloat型も用意されています。
これは、使用する桁数を無制限に指定でき、なおかつ実行中の桁数変更も可能な変数です。 桁数は、プログラム中でdigit関数を呼び出します:
- 実行結果 -
これを実行すると、100桁まで 3.33333333… が出力されます。
なお、varfloat型の桁数を制御するdigit関数は、設定した桁数を値として返します。 この性質を利用し、digit関数を空で呼び出すことにより、現在の演算桁数を取得できます:
可変精度型の数値
2つ上のプログラムでは、「 10.0vf 」のように、数値の後に「 vf 」が付加されていました。 これは、その数値がvarfloat型である事を明示するためのものです。
通常は、式の中に直接記述した数値にも、適したデータ型が自動で割り当てられます。 しかし、varfloat型とvarint型を使用する際には注意が必要です。 式の中に少数や整数が存在する場合、それがfloat型になるのかvarfloat型になるのか、 またはint型になるのかvarint型になるのかは、言語仕様として定まってはいません。
従って、確実にvarfloat型の数値を割り当てたい場合には末尾に「 vf 」を、 また確実にvarint型を割り当てたい場合は末尾に「 v 」を付加しておく事が推奨されます。
例として、以下の2つのプログラムを比較してみましょう。
- 実行結果 -
もう一つ、数値の末尾にvfを付加した場合を試します:
- 実行結果 -
上のプログラムでは、VCSSLコンソールに16桁程度「 0.33333... 」と出力されます。 つまり式の中の数値がdouble型またはfloat型として扱われた事を意味します。
下のプログラムでは、今度は100桁程度「 0.33333... 」と出力されます。 数値の末尾に「 vf 」を付けたため、数値がvarfloat型として扱われた事を意味します。
可変精度型の複素数
可変精度の複素数varcomplex型は、以下のように使用します。
上のプログラムでは、VCSSLコンソールに 30桁 「0.33333... 」、 次に行に 「0.14285... 」 と出力されます。 上でVCIは可変精度の虚数単位で、complex型の場合のIに相当するものです。 re関数 / im関数をvarcomplex型に対して使用した場合、 実部 / 虚部をvarfloat型で取得できます。