Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   Болталка (https://forum.antichat.xyz/forumdisplay.php?f=46)
-   -   Загадка :) (https://forum.antichat.xyz/showthread.php?t=139111)

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;


Время: 07:50