Gommle wrote:Hvis du bruker C (gjelder ikke C++) må begge tallene være double i pow(a, b)
Ingen av tallene trenger å være double for å få ut riktig svar.
Code: Select all
int main(void)
{
double a = 0.5, b = 16;
float c = 0.5, d = 16;
int q = 2, r = 4;
printf("double: %f\n", pow(b, a));
printf("float: %f\n", pow(d, c));
printf("int: %f\n", pow(r, q));
}
gir ut
Code: Select all
double: 4.000000
float: 4.000000
int: 16.000000
som er riktig. Det en dog må passe på er at hvis en skal printe ut svaret uten å gå veien om andre variable må en benytte riktig operator i printf(). Ettersom pow() gir ut double, må en bruke %f for å få printet ut korrekt, med mindre en konverterer det til en int og trunkerer tall etter komma ved å bruke ((int)(pow(a,b)).
@ Justin Sane;
Hvis du lurer på funksjoner for C/C++, hva de gir ut osv anbefaler jeg;
http://www.cplusplus.com/reference/clibrary/
http://www.elook.org/programming/c/
Her står det aller meste du trenger om alle funksjonene som er innebygd i C (ansi) og C++.
Og et siste tips til slutt, hvis du kan unngå å benytte kode som (a / b), med mindre svaret blir et heltall, så burde du det.
Med følgende kodesnutt;
Code: Select all
int main(void)
{
double k = 4;
double p = 8;
double t = 7;
double q1 = 1 + 0.01 * 8;
double q2 = 1 + (8 / 100);
double s1 = k * pow(q1, t);
double s2 = k * pow(q2, t);
printf("s1: %f\n", s1);
printf("s2: %f\n", s2);
}
blir resultatet
Code: Select all
s1: 6.855297 - riktig
s2: 4.000000 - galt
Her kan du se at kompilatoren anser 1 + (8 / 100) som 1 (selv om jeg bruker double og/eller float), mens hvis jeg skriver 1 + 0.01 * 8 får jeg riktig svar.