数値
Integer : Number Float : Number Double : Number Integer64 : Number IntegerPtr : Number
3ds Max 9 以降では、3 つの追加の 数値クラスが使用できるようになりました。詳細は、「64 ビット値 - Double、Integer64、IntegerPtr」を参照してください。
Number クラスは、MAXScript に標準の算術機能を提供します。Number タイプは、自由に混在させて使用することができ、MAXScript によって必要に応じて変換されます。
数値リテラルも参照してください。
リテラル
[-]{<digit>}[(.{<digit>}[(e | E | d | D)[+ | -]{<digit>}+) | L | P] --decimal number
0x{<hex_digit>}+ --hexadecimal number
例:
|
123
123.45
-0.00345
1.0e-6
0x0E
0xFFE0
.1
|
Number クラスは次の演算子およびメソッドをサポートします。
演算子
<number> + <number>
<number> - <number>
<number> * <number>
<number> / <number>
標準の算術演算。両方の数が整数の場合、結果は値が丸められない整数になります。一方または両方の数が実数の場合、両方の引数は実数となり、結果も実数になります。
最初の数字を 2 番目の数字で与えた累乗に切り上げます。最初の数が整数の場合、結果は値が丸められて整数になります。
単項マイナス
<number> == <number>
<number> != <number>
<number> > <number>
<number> < <number>
<number> >= <number>
<number> <= <number>
標準の数字比較演算
指定されたクラスのインスタンスに数を変換します。許可されたクラスは次のとおりです。
Float
Integer
String
Time --number taken as frames
Double
Integer64
IntegerPtr
メソッド
数値の新しいコピーを作成します。このメソッドは主に配列のコピーをサポートするために存在します。
数の絶対値を返します。結果は引数と同じタイプになります。
剰余演算( number1 が number2 で除算されたときの剰余です)。結果は常に実数になります。
number 以上の最も近い自然数を返します。結果は常に実数になります。
number 以下の最も近い自然数を返します。結果は常に実数になります。
三角関数
MAXScript では次の標準の三角関数をサポートしています。角度は度で表されます。結果は常に実数になります。
超越関数
MAXScript では次の標準の三角関数をサポートしています。結果は常に実数になります。
指数関数。
引数の自然対数。
基底 10 の対数。
2 つ目の引数の累乗に対する最初の引数。
引数の平方根。
乱数メソッド
2 つの引数の間にある(2 つの引数を含む)乱数の擬似数値を返します。返される値のタイプは、1 番目の引数と一致します。
指定値を使って乱数値ジェネレータを再シードします。
角度変換メソッド
数値を度からラジアンに変換した値を返します。結果は常に実数になります。
数値をラジアンから度に変換した値を返します。結果は常に実数になります。
Float Close_Enough メソッド
close_enough <float> <float> <int>
2 つの <float> 値が近似である場合には true を返します。<int> を大きくすると、近似値として認識される範囲が大きくなります。3ds Max 2008 以降で使用可能です。従来、Avguard 機能拡張として提供されていた機能です。
通常、<int> の適正な値は 10 です。
例:
|
for d1 in#(1., 10., 100., 1000.) do
(
print d1
for i = 0 to 8 do
(
d2 = d1+(d1*10.^(-i))
format "% : % : % : % : %\n" i d1 d2 (d1==d2) (close_enough d1 d2 10)
)
)
|
結果
|
1.0
0 : 1.0 : 2 : false : false
1 : 1.0 : 1.100000024 : false : false
2 : 1.0 : 1.00999999 : false : false
3 : 1.0 : 1.001000047 : false : false
4 : 1.0 : 1.000100017 : false : false
5 : 1.0 : 1.000010014 : false : false
6 : 1.0 : 1.000000954 : false : true
7 : 1.0 : 1.000000119 : false : true
8 : 1.0 : 1 : true : true
10.0
0 : 10.0 : 20 : false : false
1 : 10.0 : 11 : false : false
2 : 10.0 : 10.10000038 : false : false
3 : 10.0 : 10.01000023 : false : false
4 : 10.0 : 10.0010004 : false : false
5 : 10.0 : 10.00010014 : false : false
6 : 10.0 : 10.00000954 : false : true
7 : 10.0 : 10.00000095 : false : true
8 : 10.0 : 10 : true : true
100.0
0 : 100.0 : 200 : false : false
1 : 100.0 : 110 : false : false
2 : 100.0 : 101 : false : false
3 : 100.0 : 100.0999985 : false : false
4 : 100.0 : 100.0100021 : false : false
5 : 100.0 : 100.0009995 : false : false
6 : 100.0 : 100.0000992 : false : true
7 : 100.0 : 100.0000076 : false : true
8 : 100.0 : 100 : true : true
1000.0
0 : 1000.0 : 2000 : false : false
1 : 1000.0 : 1100 : false : false
2 : 1000.0 : 1010 : false : false
3 : 1000.0 : 1001 : false : false
4 : 1000.0 : 1000.099976 : false : false
5 : 1000.0 : 1000.01001 : false : false
6 : 1000.0 : 1000.000977 : false : true
7 : 1000.0 : 1000.000122 : false : true
8 : 1000.0 : 1000 : true : true
OK
|
ビット演算メソッド
bit.and <integer1> <integer2>
integer1 と integer2 のビットを AND 操作した結果の <integer> を返します。
bit.or <integer1> <integer2>
integer1 と integer2 のビットを OR 操作した結果の <integer> を返します。
bit.xor <integer1> <integer2>
integer1 と integer2 のビットを XOR 操作した結果の <integer> を返します。
integer1 のビットを反転した結果の <integer> を返します。
bit.shift <integer1> <integer2>
integer1 のビットを integer2 の場所を用いて移動した結果の <integer> を返します。Integer2 が正の場合、ビットは左に移動します。負の場合は右に移動します。左に移動する場合、最上位のビットは処理されません(符号なし移動演算)。
bit.set <integer1> <integer2> <boolean>
integer1 のビット integer2 が指定されたブール値に設定されている場合の結果の <integer> を返します。ビット 1 は、最低順位(最下位)のビットです。
bit.flip <integer1> <integer2>
integer1 のビット integer2 が反転された場合の結果の <integer> を返します。ビット 1 は、最低順位(最下位)のビットです。
bit.get <integer1> <integer2>
integer1 の integer2 ビットの状態の <boolean> を返します。ビット 1 は、最低順位(最下位)のビットです。
整数値に対応する文字を含む長さ 1 の結果の <string> を返します。
整数の最下位の 8 ビットのみ(ローカライズ バージョンの 3ds Max の場合は 16 ビット)が使用されます。
文字列の最初の文字に対応する <integer> 値を返します。
整数の 16 進表現を含む <string> 値を返します。
整数値を実数値に変換して返します。通常は、残りのビット メソッドを実数上で使用できるように、整数と実数を変換するために使用されます。
3ds Max 8 以降 で使用可能です。
実数値を整数値に変換して返します。通常は、残りのビット メソッドを実数上で使用できるように、整数と実数を変換するために使用されます。
3ds Max 8 以降 で使用可能です。
bit.swapBytes <integer> <integer byte1> <integer byte2>
値 int の byte1 と byte2 がスワップされた整数を返します。バイト 1 は、最低順位(最下位)のバイトです。
3ds Max 8 以降 で使用可能です。
実数が予約された実数値 NaN (非数)であれば true を返します。NaN は、浮動小数点の演算の結果を浮動小数点値で表すことができない場合に生成されます。
NaN の例は次のとおりです。f = (1.0/0.0)。
3ds Max 8 以降 で使用可能です。
実数が NaN、負の無限大、正の無限大以外のいずれかの値であれば true を返します。上記の 3 つのどれかに該当する場合は false を返します。
3ds Max 8 以降 で使用可能です。
3ds Max 9 以降での 64 ビット演算メソッド
bit.doubleAsInt64 <double>
Double 値を Integer64 値に変換します。
bit.int64AsDouble <int64>
Integer64 値を Double 値に変換します。
注:
MAXScript における有効な整数の範囲は、-2,147,483,648 ~ 2,147,483,647 です。結果がこの範囲外になる整数の計算を実行すると、MAXScript では検出されない整数の桁あふれエラーが返されます。このような桁あふれを防いだり、検出できるようにコードの設計に十分注意してください。桁あふれの結果は、一般に誤った符号の大きな数値になります。整数を
0 で除算すると MAXScript システム例外が起こります。
MAXScript における実数の範囲は、絶対値で 1.18E-38 ~ 3.40E38 までで、小数部の精度は 1.0E7 です。結果がこの範囲より小さな絶対値となる計算を実行すると、結果は 0.0
として格納されます。結果がこの範囲より大きな絶対値となる計算を実行すると、結果は無限を表す特別の値 1.#INF になります。 1.#INF と他の値を加算、減算、または乗算すると、結果は 1.#INF になります。 1.#INF で他の値 除算すると、結果は 0.0 になります。0.0 を 0.0 で除算または 1.#INF を 1.#INF で除算、 1.#INF を 0 で乗算、または 1.#INF を 1.#INF から減算すると、結果は不確定な値を表す特別な値 - 1.#IND になります。任意の数を - 1.#IND で加算、減算、乗算、除算すると、結果は - 1.#IND になります。
実数を表示または出力すると、MAXScript により値が有効桁数第 6 位まで出力されます。次の表は、MAXScript の変数に保存されるさまざまな値について、格納される値と表示される値を示します。
入力値
|
格納される値
|
表示される値
|
1.23456789
|
1.23456788
|
1.23457
|
1.1
|
1.10000002
|
1.1
|
1.01
|
1.00999999
|
1.01
|
1.001
|
1.00100004
|
1.001
|
1.0001
|
1.00010001
|
1.0001
|
1.00001
|
1.00001001
|
1.00001
|
1.000001
|
1.00000095
|
1.0
|
1.0000001
|
1.00000011
|
1.0
|
1.00000001
|
1.00000000
|
1.0
|
100017.911
|
100017.914
|
100018.0
|
例:
|
次のスクリプトで、Number クラスのさまざまなリテラル、コンストラクタ、プロパティ、演算子、メソッドの使用方法を示します。
|
-- numbers test bed
i=10-- assign integers to variables
j=20
i/j-- integer divide, result is integer
i=i as float-- convert i to a float
i/j-- float divide, result is float
i += 1-- increment i by 1
if i < j do i=2.^3-- if i is less than j, set i to 2 to the 3rdpower
mod j i-- return remainder of j divided by i
cos 30.0-- return cosine of 30 degrees
sqrt j-- return square root of j
seed 12345-- seed the random number generator
for k=1 to 5 do print (random i j)-- print out 3 random numbers
|
出力:
|
10-- result of line 2
20-- result of line 3
0-- result of line 4 (10/20)
10.0-- result of line 5
0.5-- result of line 6 (10./20)
11.0-- result of line 7
8.0-- result of line 8 (2.^3)
4.0-- result of line 9
0.866025-- result of line 10
4.47214-- result of line 11 (sqrt 20)
OK-- result of line 12
10.7775-- output from line 13 (random 8. 20)
15.0183
17.4467
16.1027
10.1344
OK-- result of line 13
|