Просмотр полной версии : Загадка :)
crawen_s
03.09.2009, 11:49
как запрограмировать вычисление функции z = x16 (x в 16 степени), с использованием наименшего количества операций умножения ??? :)
использовать циклы :)
или что то типа этого:
(x+x+x+x+x+x+x+x+x+x+x+x+x+x+x+x)(x^16) :D
Z^х
pascal
z=exp(ln(z) * x)
php
$z =exp(log($z) * $x)
Ему скорей всего для паскаля =\
ня http://programmersforum.ru/showthread.php?t=4192
гугол наше фсё
geezer.code
03.09.2009, 12:00
побитовый сдвиг, не ?
[Delphi, PASCAL]
uses math;
function power_Ex(x: Extended): extended;
begin
Result:= Power(x,16);
end;
Если произвести анализ системной функции Power, в результате мы придем к исходнику функции IntPower
function IntPower(const Base: Extended; const Exponent: Integer): Extended;
asm
mov ecx, eax
cdq
fld1 { Result := 1 }
xor eax, edx
sub eax, edx { eax := Abs(Exponent) }
jz @@3
fld Base
jmp @@2
@@1: fmul ST, ST { X := Base * Base }
@@2: shr eax,1
jnc @@1
fmul ST(1),ST { Result := Result * X }
jnz @@1
fstp st { pop X from FPU stack }
cmp ecx, 0
jge @@3
fld1
fdivrp { Result := 1 / Result }
@@3:
fwait
end;
Как видно из листинга команда умножения вызывается 2 раза, я думаю это оптимальный вариант, т.к. все системные функции библиотеки math, оптимизированы.
Ну вообще задачка больше математическая... Если условие таково, что можно юзать только операцию умножения, то первое что приходит на ум, реализуется с помощью 4-х операций умножения...
$x = число;
for ($i = 1; $i <= 4; $i++)
$x = $x*$x;
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot