1

ruby-docでは、それは<Fixnum> ** <Numeric>分数である可能性があると述べており、例を示しています。

2 ** -1 #=> 0.5
2 ** 0.5 #=> 1.4142135623731

しかし、私のirbでは、以下Rationalの指数のように答えが返されることがあります。-1

2 ** -1 #=> (1/2)
2 ** 0.5 #=> 1.4142135623731

ruby-docは正確ではないようで、rubyはRational可能な場合はキャストを型変換しようとしますが、完全にはわかりません。底と指数の両方が両方である場合、ここでの正確な型キャスト規則は何Fixnumですか?特にRuby1.9.3に興味がありますが、バージョンによって結果が異なりますか?

4

1 に答える 1

1

DGMは正しいです。答えは、リンクしたドキュメントにありますが、C言語です。ここに適切なビットがあります。私はいくつかのコメントを追加しました:

static VALUE
fix_pow(VALUE x, VALUE y)
{
    long a = FIX2LONG(x);

    if (FIXNUM_P(y)) {          // checks to see if Y is a Fixnum
        long b = FIX2LONG(y);

        if (b < 0)
            // if b is less than zero, convert x into a Rational
            // and call ** on it and 1 over y
            // (this is how you raise to a negative power).
            return rb_funcall(rb_rational_raw1(x), rb_intern("**"), 1, y);

これで、Rationalのドキュメントに移動して**演算子についての説明を確認できます。

rat ** numeric → numeric

べき乗を実行します。

例えば:

Rational(2)    ** Rational(3)    #=> (8/1)
Rational(10)   ** -2             #=> (1/100)
Rational(10)   ** -2.0           #=> 0.01
Rational(-4)   ** Rational(1,2)  #=> (1.2246063538223773e-16+2.0i)
Rational(1, 2) ** 0              #=> (1/1)
Rational(1, 2) ** 0.0            #=> 1.0
于 2012-01-01T04:44:56.487 に答える