Jestem całkiem nowym programistą i właśnie bawiłem się dzisiaj kodowaniem próbując korzystać z funkcji i zrobiłem prosty fragment kodu, który rozwiązał problem matematyczny, który miałem na jednej z moich lekcji. w zasadzie przyjmuje wzór (ilość bakterii) * 2^godzin i oblicza to.Jak radzić sobie z przepełnieniem w C
Mój problem polega na tym, że kiedy dostaję naprawdę dużą liczbę, to nie powraca poprawnie, zawsze otrzymuję -2147483648 z powrotem po pewnym rozmiarze numeru. Zgaduję, że ma to coś wspólnego z przepełnieniem, ale nie jestem w 100% pewien, jak to działa. Próbuję dowiedzieć się, jak uzyskać rzeczywiste liczby, których szukam po tym, jak trafiłem na to przepełnienie. Więc co mogę zrobić, aby poradzić sobie z przepełnieniem?
Początkowo ustawiałam wszystko na int, ale po pewnym lekturze myślę, że być może zmiana wszystkiego na długo może mi pomóc, ale tak się nie stało, jeśli jest to dla mnie straszne, pozwól wiedzieć! Również numery testowe, których używam, to 1500 i 24, które zawsze zwracają powyższą liczbę.
Oto kod Dzięki!
#include<stdio.h>
#include<math.h>
long bacteria(long b, long h);
int main(void)
{
long f,g;
scanf("%ld%ld",&f,&g);
f = bacteria(f,g);
printf("%ld\n",f);
return 0;
}
long bacteria(long b,long h)
{
long d;
printf("%ld %ld\n",b,h);
d = b * (pow(2,h));
return d;
}
Wykorzystanie 'powl' dla' long', '' pow' powraca double' –
mam jakiś kod [tutaj] (https://groups.google.com/d/topic/comp.lang .apl/Lu2tgqanK5Q/dyskusja) w większości pochodzą z kodu przykładowego w CFAQ. –
Dziękujemy! Nie miałem pojęcia, że pow zwrócił podwójną! – Yosvan10