PDA

Просмотр полной версии : Загадка :)


crawen_s
03.09.2009, 11:49
как запрограмировать вычисление функции z = x16 (x в 16 степени), с использованием наименшего количества операций умножения ??? :)

HakaR
03.09.2009, 11:56
Не сюда пришёл! :(

REBUUS
03.09.2009, 11:57
использовать циклы :)
или что то типа этого:

(x+x+x+x+x+x+x+x+x+x+x+x+x+x+x+x)(x^16) :D

rushter
03.09.2009, 11:59
Z^х
pascal
z=exp(ln(z) * x)
php
$z =exp(log($z) * $x)

Ponchik
03.09.2009, 11:59
Ему скорей всего для паскаля =\
ня http://programmersforum.ru/showthread.php?t=4192
гугол наше фсё

geezer.code
03.09.2009, 12:00
побитовый сдвиг, не ?

flacs
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, оптимизированы.

Fepsis
03.09.2009, 12:28
Ну вообще задачка больше математическая... Если условие таково, что можно юзать только операцию умножения, то первое что приходит на ум, реализуется с помощью 4-х операций умножения...

$x = число;
for ($i = 1; $i <= 4; $i++)
$x = $x*$x;