Mam oto takich kilka urywków kodu (za duży by temat był czytelny, ograniczam się do dotyczących zmiennej urywków), w których używam pewnej zmiennej do przechowywania tymczasowej wartości. Jednakże ona w kilku nieokreślonych przeze mnie dokładniej przypadkach nabiera horrendalnej wartości.
Oto jej deklaracja:
long unsigned cache_sz=0;
Tutaj jest jej główne zastosowanie, zbieranie/przechwycenie informacji, które potem zostaną usunięte po pobraniu:
unsigned straty=0, efektywnosc=60, efektownosc=20;
double procent_o;
long unsigned j+=random(efektywnosc,0);
// obliczenie wartości zmiennej j [...] w żadnym wypadku nie przekracza ona wartości kilku tysięcy
for(int i=1;i<=zy;i++) {
// obliczenia
procent_o=procent(naj, zy);
efektywnosc+=rab*15;
efektownosc+=naj*7;
for (int y=1;y<=zy;y++) {
if (random(100,0)<efektywnosc) j+=random(efektywnosc,0);
else if (random(100,0)>efektywnosc) {
if (random(100,0)>procent_o) ++straty, --amount[6];
}
}
loading(1);
}
// koniec obliczeń j
cache_sz=j;
static_cast<long unsigned>(cache_sz); // wynik desperackiego wyszukiwania błędu, sam nie wiedziałem co już robić w związku z problemem.
Wspomniana funkcja random.
int random(int skala, int odejmij) {
int nLosowana;
do {
nLosowana = (rand() % skala + 1) - odejmij;
} while (nLosowana <= 0);
return nLosowana;
}
Później następuje wyczyszczenie informacji ze zmiennej.
long unsigned zysk=calculate()+cache_sz;
sz+=zysk; /* najważniejsza część, bo w niej chyba tkwi cały galimatias. Sęk w tym, która zmienna ma tak ogromne wartości, sz czy calculate(). Wyszło że calculate() jest w porządku. */
cache_sz=0;
Funkcje calculate() i procent().
long unsigned calculate() {
long unsigned zysk_infra=amount[0]*income[0]+amount[1]*income[1]+amount[2]*income[2]+amount[3]*income[3]+amount[4]*income[4];
return zysk_infra;
}
double procent (double u1, double u2) {
double wynik;
wynik = u1 / u2;
wynik *= 100;
return wynik;
}
Dlaczego więc po uruchomieniu kodu i przechwyceniu informacji zmienna 'zysk' ma jakąś horrendalną wartość? np. 400 tys. około. Moim zdaniem była to niezgodność typów zmiennych, więc przestawiłem się na long unsigned, potem desperacko chwyciłem się brzytwy w postaci static_cast, a teraz sam już nie wiem.
Proszę, nie ignorujcie mnie. Każda odp. jest w cenie!