Potřebuji pomoc s jednou metodou... nevím si rady jak to udělat bez použití toho Math.pow(a,b)...
Implementujte funkci double power(double base, int exponent) která pro zadaný základ base a exponent exponent vrátí base ^ exponent. Exponent předpokládejte kladný anebo nulový. Při implementaci funkce nepoužívejte funkci Math.pow(a, b).
Alebo skorej nieco taketo ze ak mas cislo reprezentovane v bin (exponentu) tak staci vzdy vynasobit cislo samo zo sebou a ak je 1 tak ho potom vynasobit zakladom. Asi takto pow(3.1415297,5) = pow (a,0x101) = 1*a * ( 0 * a^2) + 1*(a^4). Cize ti staci robit take nieco:
public static void pow(double a, int b) {
double out = 1.;
for(int i=0; i<32; i++) { // viac ako 32 iteracii nepotrebujes
if(b%2) {
out *= a;
}
b /=2;
a *= a;
}
return out;
}
#3sleepy
cože? tak tohle opravdu nevím jestli bude fungovat :) Zkoušel sis zadat těch tvých pow(3.1415297,5) při počtu iterací 32? Ano, opravdu vyjde nekonečno ;)
jinak nepřijde ti tohle jednodušší?
double pow(double n, int e)
{
double r = n;
for (int i = 1; i < e; i++) r *= n;
return r;
}
#4ingiraxo
ano myslim to vazne a nie nevyde. Nieje to dobre napisane, ale princip v tom je, troska sa mi tam priplietla python syntax. Na a nepozeraj to je nezauimave, zauimave je iba out. a to vide spravne
#4ingiraxo
Casovo narocnejsie mi to pride, ale aj jednoduchie. No ale ten tvoj algoritmus take zvrholosti ako pow (1. - 1/10^9, 10^9); bude pocitat nejaku tu chvylku. Moj na to potrebuje konstantny cas.
#10KIIV
nie jedine, ale asi jedny pouzitelny neviem ako dobre konverguje exp. Ale pre cisla blizke 0 to pojde pekne. V podstate staci vyuzit co si napisal ty s tym ze exp(y*ln(x))=exp(m)*exp(z), kde m je cele a z je nieco blizke 0, toto asi pojde odost rychlejsie ako to co chcem uviest. Ale kedysi davno som rozsiril, algoritmus o to co sa deje za desatinou ciarkou. Asi je to nevyhodnejsie, lebo tam treba pociatat vela odmocnin. Ale da sa to. Konkretne tak ze som si povedal ze nech je bin cislo zapisane takto: b_0 * 2^0 + b_1*2^1 + ... + b_n * 2 ^n + b_(-1) * 2^(-1) + ... + b_(-m) * 2^(-m), b je z {0,1}. A kedze vyssie uvedena rovnica sa da napisat: pow(a,n) = a^n = a^bin(n) = a^(b_0 * 2^0 + b_1*2^1 + ... + b_n * 2 ^n) = a^(b_0 * 2^0) * a^(b_1*2^1) * ... * a ^( b_n * 2 ^n), tak som to len doplnil o tu cast za desatinou ciarkou, kde ak sa dosadi zaporne cislo tak dostavas 1/2^k, k je z {0,...,n} co je vyjadrenie 2^k odmocniny. 2^k odmocninu som pocital ako odmocninu z 2^(k-1) odmocniny cize znova to iste ako pri tom umocnovani. A cuduj sa svete fungovalo to a davalo to dobre vysledky. :D