整数除法截断
对没有声明数据类型的常量和变量执行算术运算时,Maya 会根据存在的值推测数据类型。例如,在下面这个语句中:
float $where = 1/2; // Result: 0
Maya 将 1 和 2 视为整数,因为它们没有小数点。表达式将整数 1 除以整数 2。整数结果为 0,并且有余数 1。Maya 会丢弃余数。
由于 where 是一个浮点变量,Maya 将整型值 0 转化为浮点值 0(是相同的值),然后将该值指定给 where。若要获得值的小数部分,则需要将整数运算数之一转化为浮点数:
float $there = 1/2.0; // Result: 0.5
Maya 将 2.0 视为浮点数,因为它具有小数点。数字 1 转化为浮点数,并且发生浮点数除法,从而产生值 0.5,然后会将该值指定给 there。下面介绍了另一种保留除法小数部分的方法。
float $youGo = float(1)/2;
此处的值 1 转化为浮点数,这会导致值 2 也转化为浮点数。这将创建浮点数除法,从而保留除法的小数部分。
精度和最大数值大小
对于字符串、矩阵或数组,最大大小仅取决于计算机上可用的内存量。但是,浮点数和整数在精度和最大大小方面有限制。
整数的最大大小与 C 语言中的相同,并且与机器相关。在大多数计算机上,该范围是 -2,147,483,648 到 2,147,483,647。
浮点数的最大精度和范围与 C 语言中的双精度数相同,并且与机器相关。浮点数精度有限,在长计算中会产生四舍五入误差。但是,由于浮点型的精度较高(大约十五位数字的精度),四舍五入误差通常不会成为问题。
范围折回
变量具有受限制的范围。超过这些范围时,会出现不需要的结果。
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
在该示例中,根据运算符优先性,会则会首先完成相乘。在两个整数上执行相乘,所以结果类型为一个整数。因为此次相乘的值超过整数的最大范围,所以值会折回。
以下计算说明内部出现的情况:
$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;