=encoding euc-jp =head1 NAME =begin original integer - Perl pragma to use integer arithmetic instead of floating point =end original integer - 浮動小数点ではなく整数算術を使うための Perl プラグマ =head1 SYNOPSIS use integer; $x = 10/3; # $x is now 3, not 3.33333333333333333 =head1 DESCRIPTION =begin original This tells the compiler to use integer operations from here to the end of the enclosing BLOCK. On many machines, this doesn't matter a great deal for most computations, but on those without floating point hardware, it can make a big difference in performance. =end original これは、BLOCK 内で整数演算を使うようにコンパイラに知らせます。 多くのマシンで、これはほとんどの計算に対して大きな意味はありませんが、 浮動小数点演算ハードウェアを持たないマシンにとっては、性能上 大きな差となります。 =begin original Note that this only affects how most of the arithmetic and relational B handle their operands and results, and B how all numbers everywhere are treated. Specifically, C has the effect that before computing the results of the arithmetic operators (+, -, *, /, %, +=, -=, *=, /=, %=, and unary minus), the comparison operators (<, <=, >, >=, ==, !=, <=>), and the bitwise operators (|, &, ^, <<, >>, |=, &=, ^=, <<=, >>=), the operands have their fractional portions truncated (or floored), and the result will have its fractional portion truncated as well. In addition, the range of operands and results is restricted to that of familiar two's complement integers, i.e., -(2**31) .. (2**31-1) on 32-bit architectures, and -(2**63) .. (2**63-1) on 64-bit architectures. For example, this code =end original これはほとんどの算術および関係 B<演算子> がオペランドと結果を どのように扱うかにのみ影響を与え、 その他の全てでどのように数値を扱うかには影響を B<与えない> ことに 注意してください。 具体的には、C は算術演算子 (+, -, *, /, %, +=, -=, *=, /=, %=, 単項のマイナス)、比較演算子 (<, <=, >, >=, ==, !=, <=>)、ビット単位演算子 (|, &, ^, <<, >>, |=, &=, ^=, <<=, >>=) の結果を計算する前に オペランドの小数部は切り詰め (または切り捨て) られます, 結果の小数部も同様に切り詰められます。 さらに、オペランドと結果の範囲はおなじみの 2 の補数に制限されます; つまり、32 ビットアーキテクチャでは -(2**31) .. (2**31-1)、 64 ビットアーキテクチャでは -(2**63) .. (2**63-1) です。 例えば、以下のコードは =begin original use integer; $x = 5.8; $y = 2.5; $z = 2.7; $a = 2**31 - 1; # Largest positive integer on 32-bit machines $, = ", "; print $x, -$x, $x + $y, $x - $y, $x / $y, $x * $y, $y == $z, $a, $a + 1; =end original use integer; $x = 5.8; $y = 2.5; $z = 2.7; $a = 2**31 - 1; # 32 ビットマシンでの最大の正数 $, = ", "; print $x, -$x, $x + $y, $x - $y, $x / $y, $x * $y, $y == $z, $a, $a + 1; =begin original will print: 5.8, -5, 7, 3, 2, 10, 1, 2147483647, -2147483648 =end original 以下の結果となります: 5.8, -5, 7, 3, 2, 10, 1, 2147483647, -2147483648 =begin original Note that $x is still printed as having its true non-integer value of 5.8 since it wasn't operated on. And note too the wrap-around from the largest positive integer to the largest negative one. Also, arguments passed to functions and the values returned by them are B affected by C. E.g., =end original $x は、まだ演算されていないので、5.8 という非整数値を持っているように 表示されることに注意してください。 最大の整数から最小の整数への回り込みにも注意してください。 また、関数に渡される引数と、関数から返される値は、 C の影響を B<受けません>。 例えば、 srand(1.5); $, = ", "; print sin(.5), cos(.5), atan2(1,2), sqrt(2), rand(10); =begin original will give the same result with or without C The power operator C<**> is also not affected, so that 2 ** .5 is always the square root of 2. Now, it so happens that the pre- and post- increment and decrement operators, ++ and --, are not affected by C either. Some may rightly consider this to be a bug -- but at least it's a long-standing one. =end original これは C のありなしで同じ結果を返します。 累乗演算子 C<**> も影響を受けないので、2 ** .5 は常に 2 の平方根です。 そして、事前と事後のインクリメントおよびデクリメント演算子 ++ と -- も C の影響を受けません。 正当にもこれをバグだと考える人もいます -- しかし少なくともこれは 長年存在するものです。 =begin original Finally, C also has an additional affect on the bitwise operators. Normally, the operands and results are treated as B integers, but with C the operands and results are B. This means, among other things, that ~0 is -1, and -2 & -5 is -6. =end original 最後に、C はビット単位演算子にも追加の影響を与えます。 通常、オペランドと結果は B<符号なし> 整数として扱われますが、 C 付きでは、オペランドと結果は B<符号付き> になります。 これは、特に、~0 は -1、-2 & -5 は -6 になることを意味します。 =begin original Internally, native integer arithmetic (as provided by your C compiler) is used. This means that Perl's own semantics for arithmetic operations may not be preserved. One common source of trouble is the modulus of negative numbers, which Perl does one way, but your hardware may do another. =end original 内部的には、(C コンパイラによって提供される) ネイティブな整数算術が 使われます。 これは、算術演算の Perl 独自の意味論は保存されないことを意味します。 よくある問題の源の一つは、負数の剰余で、Perl の方式とハードウェアの 方式は違うかも知れません。 % perl -le 'print (4 % -3)' -2 % perl -Minteger -le 'print (4 % -3)' 1 =begin original See L, L =end original L, L を 参照してください。 =begin meta Translate: Kentaro Shirakata (1.00) =end meta =cut