środa, 22 lipca 2009

Mnożenie egipskie

Tym razem wpis inspirowany artykułem na The Daily WTF. Mnożenie dużych liczb może być skomplikowane i trudne. Egipcjanie wymyślili algorytm który to ułatwia, nie będę się wdawał w szczegóły, wszystko jest wyjaśnione w powyższym tekście. Ja natomiast napisałem prosty program w Ruby, który jest implementacją tego algorytmu:


# w Ruby 1.8.7 już jest taka metoda
class Fixnum
def even?
self.divmod(2)[1] == 0
end
end

def em(a, b)
result = 0
while a>1 do
a = a / 2
b = b * 2
if !a.even?
result += b
end
end
result
end


Metoda em mnoży dwie liczby wg algorytmu, metoda even? jest konieczna tylko w przypadku uruchamiania w Ruby 1.8.6. Powyższa implementacja będzie zwracać zły wynik w przypadku mnożenia przez 1, :) ale to jest chyba dosyć "trywialne" zadanie, do którego nie trzeba wykorzystywać żadnych algorytmów.

Brak komentarzy: