値
プロデルで扱うことができる値には、大きく次の2種類あります。
- 値型
- オブジェクト型
値型
値型には、次の型があります。
- 固定小数
- 長整数
- 整数
- 浮動小数
- 倍浮動小数
これらの値型は、格納できる値の範囲や使用するメモリ容量が異なります。
値型名 | 格納できる値の範囲 | ビット数 |
---|---|---|
整数 | -2,147,483,648~2,147,483,647 | 32 |
長整数 | -9,223,372,036,854,775,808~9,223,372,036,854,775,807 | 64 |
浮動小数 | 約7桁 | 32 |
倍浮動小数 | 約15~16桁 | 64 |
固定小数 | 約28~29桁 | 128 |
なお、これらの型をまとめて数値型と呼ぶことがあります。
また、プロデル内部で値型は、1つの変数または1つの式評価ごとにオブジェクト型にボクシングされるため、実際に使用されるメモリ容量はこのビット数よりも多くなります。
値型は、変数に代入するときに値だけがコピーされます。
手順呼び出しの際に値型の変数を指定した場合は、値渡しになります。
値型の定数
プログラムで具体的な数字(リテラル)を指定すると、プロデルが解析時にその数値を格納できる型に調整します。
オブジェクト型
「作る」命令によって作られた「種類」のインスタンスは、すべてオブジェクト型です。
オブジェクト型は、変数に代入するときにオブジェクトへの参照がコピーされます。
手順呼び出しの際にオブジェクト型を指定した場合は、参照渡しになります。
値の変換
値型の場合で、型が異なる変数に代入しようとすると、自動的に(暗黙的に)値の変換が行われます。
例えば次のプログラムでは、1.5が代入されている浮動小数である【値1】を、整数である【値2】へ代入しています。
【値1:浮動小数】は、1.5
【値2:整数】は、値1
値2を表示する
値1と値2は型が異なるため、値1を値2へ代入するときに、値変換が行われます。
具体的には、小数部分が切り捨てられて、1.5から1へ値変換されます。小数は四捨五入されません。
プロデルでは、変換前後の型に関係なく、すべて自動的に変換されます。
値変換の時に、変換前の値が、変換後の範囲に収まらない場合は、切り捨てられるか正しく変換されないことがあります。
整数へ | 長整数へ | 浮動小数へ | 倍浮動小数へ | 固定小数へ | |
---|---|---|---|---|---|
整数から | - | ○ | ○ | ○ | ○ |
長整数から | △ | - | △ | ○ | ○ |
浮動小数から | 切り捨て | 切り捨て | - | △ | ○ |
倍浮動小数から | 切り捨て | 切り捨て | △ | - | ○ |
固定小数から | 切り捨て | 切り捨て | △ | △ | - |
○=正しく変換されます △=変換後の範囲に収まる場合は正しく変換されます
切り捨て=小数が切り捨てられます
文字列との変換
数値型の値を文字列型の変数へ代入する時には、数値型が数字に変換されて文字列となります。
文字列型の値を数値型の変数へ代入する時には、文字列である数字が数値に変換されて数値型の値となります。
値変換の誤差
コンピュータの性質上、計算を行う際にわずかな計算誤差が生まれることがあります。
例えば、次のようなプログラムを実行すると、
本来は0.1と表示されるべきところが0.1000061と誤った結果になります。
295.5-295.4を表示する
この現象は、プロデルの不具合ではなく、小数点を含む数値をメモリ上に格納する際に起こります。
このような時は、計算誤差が生じる可能性が少ない、
固定小数型の変数に代入してから計算すると、誤差を回避できます。
【値1:固定小数】は、295.5
【値2:固定小数】は、295.4
値1-値2を表示する
なお、整数型ではこのような誤差は発生しないため、10倍した値を整数型として格納しておき、必要に応じて1/10にすると言った工夫も考えられます。
変数
変数は、宣言すると
型宣言すると、その型以外の値を入れられません。
変数名
プロデルでは、英数字について大文字・小文字、全角と半角を区別しません。
次のように「全角小文字のa」と「半角大文字のA」は、同じ変数として扱われます。
a=10
Aを報告