Pow - typy podawanych liczb

Mam taki mały problem.

Mam mały programik z biblioteką math.h

#include

#include

#include

using namespace std;


void main()

{

	double f= pow(2,2);

	cout<<"Kwadrat 2 to:"<
	getch();

}

Dlaczego pow(2,2) wywala błąd?

Działa dopiero gdy zmianie 2 na 2.0, czyli na typ float.

Czemu tak się dzieje?

Ponieważ kompilator nie jest prorokiem i nie wie którą wersje Pow chcesz zastosować:

double pow (double base,double exponent);

double pow (double base,int exponent);

Mam kilka pytań

1.Dlaczego są tylko 2 możliwości pow?

2.Dlaczego nie mogę np. podaj 2x int

3.Czy muszę podawać to double przed pow?

  1. Możliwości pow jest więcej: http://www.cplusplus.com/reference/clibrary/cmath/pow/

  2. Ponieważ bardzo szybko się przepełni, możesz dać:

pow((double)2,2);

lub:

pow(2.,2);

lub:

pow(2f,2);

  1. To co podałem nazywa się prototyp (deklaracja), to double już podane.

Jak to funkcja może się przepełnić?

I czym się różnią te 2 funkcje ?

double pow (double base,double exponent);

double pow (double base,int exponent);

No, czym? Porównaj sam, programowanie polega nie na klepaniu kodu, ale na myśleniu :slight_smile: Więc jest tak:

double pow (double base,double exponent);

double pow (double base,int exponent);

I jedziemy, słówko po słówku… Pogrubieniem zaznaczyłem różnice: double pow (double base, double exponent); double pow (double base, int exponent); To co pogrubiłem, to jest typ danych. Zatem ta funkcja akceptuje/potrafi odróżnić, jako drugi parametr dwa typy - int oraz double. Int to liczba całkowita, double to zmiennoprzecinkowa. Ot cała różnica. Możesz wywołać funkcję tak:

pow(2.0,3); // zwróci 8.0

// albo tak:

pow(2.0, 3.1); // zwróci mniej więcej 8.5

Kompilator C wie jaką funkcję ma wywołać, bo zna typy argumentów. To się ogólnie nazywa przeciążaniem funkcji.

No teraz widzę, może być 1 liczba zmiennoprzecinkowa i 1 całkowita albo 2 zmiennoprzecinkowe.

Teraz mam takie coś:

I teraz wywala błąd taki:

Spotykam to przy każdej funkcji biblioteki math.h, o co chodzi z przepełnieniem funkcji?

http://www.cplusplus.com/reference/clib … dlib/rand/