mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/matrix.rb (**): Optimization (up to 45% faster)
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25457 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
55bf7f9d40
commit
c038e9003c
2 changed files with 9 additions and 11 deletions
|
@ -1,3 +1,7 @@
|
|||
Sun Oct 25 05:44:34 2009 Marc-Andre Lafortune <ruby-core@marc-andre.ca>
|
||||
|
||||
* lib/matrix.rb (**): Optimization (up to 45% faster)
|
||||
|
||||
Sat Oct 24 14:28:40 2009 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||
|
||||
* hash.c (rb_hash_set_default_proc): checks arity of defalt_proc
|
||||
|
|
|
@ -642,18 +642,12 @@ class Matrix
|
|||
return Matrix.identity(self.column_size) if other == 0
|
||||
other = -other
|
||||
end
|
||||
z = x
|
||||
n = other - 1
|
||||
while n != 0
|
||||
while (div, mod = n.divmod(2)
|
||||
mod == 0)
|
||||
x = x * x
|
||||
n = div
|
||||
end
|
||||
z *= x
|
||||
n -= 1
|
||||
z = nil
|
||||
loop do
|
||||
z = z ? z * x : x if other[0] == 1
|
||||
return z if (other >>= 1).zero?
|
||||
x *= x
|
||||
end
|
||||
z
|
||||
elsif other.kind_of?(Float) || defined?(Rational) && other.kind_of?(Rational)
|
||||
Matrix.Raise ErrOperationNotDefined, "**"
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue