データ型を宣言せずに、定数や変数に対して算術演算を実行すると、使用されている値に応じてデータ型が推測されます。たとえば、次の文を見てください。
float $where = 1/2; // Result: 0
1 と 2 には小数点がないため、整数として扱われます。このエクスプレッションは整数 1 を整数 2 で割っています。結果は整数で商は 0、余りは 1 になります。余りは Maya により切り捨てられます。
where は float 変数なので、整数値 0 は浮動小数点値 0 に変換され(これらは同じ値です)、この値が where に代入されます。値の小数部分を取得するには、integer (整数)型の被演算数の 1 つを float に変換する必要があります。
float $there = 1/2.0; // Result: 0.5
2.0 には小数点があるため、浮動小数点値として扱われます。数値 1 は float に変換され、float 型の除算が行われて、結果として得られた値 0.5 が there に代入されます。除算の小数部分を維持するもう 1 つの方法は次のとおりです。
float $youGo = float(1)/2;
この例では、値 1 は float に変換されるため、値 2 も float に変換されます。この結果、float 型の除算が行われ、小数部分が維持されます。
string、matrix、または array の最大サイズは、コンピュータで使用可能なメモリの量によってのみ決まります。しかし、float と int の場合は、精度と最大サイズに対する制限があります。
int の最大サイズは C 言語の場合と同じで、コンピュータによって異なります。多くのコンピュータでは、この範囲は -2,147,483,648 から 2,147,483,647 です。
float の最大精度と範囲は、C 言語の double と同じで、コンピュータによって異なります。浮動小数点数は精度に限界があり、長い演算ではラウンド誤差が累積する場合があります。しかし、float データ型の精度は比較的高いため(小数点以下約 15 桁)、多くの場合、ラウンド誤差が問題になることはありません。
変数の範囲には制限があります。この範囲を超えた場合、望ましい結果は得られません。
int $mighty = 2147483647 + 1; // Result: -2147483648 int $radical = -2147483648 - 1; // Result: 2147483647 int $buddy = 2147483648; // Result: -2147483648 int $man = 2147483647 + 2; // Result: -2147483647
変数の最大範囲を超えた場合、変数の値は変数の最小値に循環します。また、変数の最小範囲を下回った場合、変数の値は変数の最大値に循環します。
float $GG = 1.5 + 1000000000 * 3; // Result: -1294967294.5
この例では、演算子の優先順位のため、乗算が先に行われます。乗算は 2 つの int に対して実行されるため、結果の型は int になります。この乗算の結果得られる値は int の最大範囲を超えてしまうため、値の循環が発生します。
次の計算は、内部的に起こっていることを表しています。
$GG = 1.5 + 1000000000 * 3; $GG = 1.5 + 3000000000; // Maxumum int range exceded $GG = 1.5 + 3000000000 + (2147483648) - (2147483648.0); $GG = 1.5 + 3000000000 + (-2147483648) - (2147483648.0); $GG = 1.5 + 3000000000 - 4294967296; $GG = 1.5 + -1294967296; $GG = -1294967294.5;