argra****@users*****
argra****@users*****
2009年 6月 22日 (月) 18:36:44 JST
Index: docs/modules/integer-1.00/integer.pod diff -u /dev/null docs/modules/integer-1.00/integer.pod:1.1 --- /dev/null Mon Jun 22 18:36:44 2009 +++ docs/modules/integer-1.00/integer.pod Mon Jun 22 18:36:44 2009 @@ -0,0 +1,187 @@ + +=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<operators> handle their operands and results, and B<not> how all +numbers everywhere are treated. Specifically, C<use integer;> 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<use integer;> は算術演算子 +(+, -, *, /, %, +=, -=, *=, /=, %=, 単項のマイナス)、比較演算子 +(<, <=, >, >=, ==, !=, <=>)、ビット単位演算子 (|, &, +^, <<, >>, |=, &=, ^=, <<=, >>=) の結果を計算する前に +オペランドの小数部は切り詰め (または切り捨て) られます, +結果の小数部も同様に切り詰められます。 +さらに、オペランドと結果の範囲はおなじみの 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<not> affected +by C<use integer;>. E.g., + +=end original + +$x は、まだ演算されていないので、5.8 という非整数値を持っているように +表示されることに注意してください。 +最大の整数から最小の整数への回り込みにも注意してください。 +また、関数に渡される引数と、関数から返される値は、 +C<use integer;> の影響を 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<use integer;> 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<use integer;> +either. Some may rightly consider this to be a bug -- but at least it's +a long-standing one. + +=end original + +これは C<use integer;> のありなしで同じ結果を返します。 +累乗演算子 C<**> も影響を受けないので、2 ** .5 は常に 2 の平方根です。 +そして、事前と事後のインクリメントおよびデクリメント演算子 +++ と -- も C<use integer;> の影響を受けません。 +正当にもこれをバグだと考える人もいます -- しかし少なくともこれは +長年存在するものです。 + +=begin original + +Finally, C<use integer;> also has an additional affect on the bitwise +operators. Normally, the operands and results are treated as +B<unsigned> integers, but with C<use integer;> the operands and results +are B<signed>. This means, among other things, that ~0 is -1, and -2 & +-5 is -6. + +=end original + +最後に、C<use integer;> はビット単位演算子にも追加の影響を与えます。 +通常、オペランドと結果は B<符号なし> 整数として扱われますが、 +C<use integer;> 付きでは、オペランドと結果は 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<perlmodlib/"Pragmatic Modules">, L<perlop/"Integer Arithmetic"> + +=end original + +L<perlmodlib/"Pragmatic Modules">, L<perlop/"Integer Arithmetic"> を +参照してください。 + +=begin meta + +Translate: Kentaro Shirakata <argra****@ub32*****> (1.00) + +=end meta + +=cut +