[CTP3] uint64 の演算 [PowerShell]
PowerShell v1 では符号なし64ビット変数 uint64 間の演算を行おうとするとエラーになります。
ただし実際に大きな数値が演算子の両側にあるときのみです。
Uint64型の変数が演算対象であっても、格納されている値が 2147483647(16進数で 7FFFFFFF)を超えていなければエラーは発生しません 。
The operation '[System.UInt64] - [System.UInt64]' is not defined.
v2 CTP3 ではそのような制限はなく演算可能となっていますね。
PS > [uint64]$v1 = 2147483648
PS > [uint64]$v2 = 2147483647
PS > $v1 - $v2
でもエラーはでません。
CTP2 ではどうでしたっけ?まだだめだったような。 (今試せる環境が無い・・・元に戻すの面倒)
今までは- 1bit 精度を失っても問題のない場合には、それぞれ2で割って引いて2倍する。
- そもそも元の値がInt64の範囲を超えない保証があるならキャストして引き算する。
- Decimal構造体を使う。たとえば $GDiff = [Decimal]$G2 - [Decimal]$G1 のように。
タグ:powershell