majsterkong
majsterkong
#programowanie #cpp #cplusplus

Jak ogarnąć przepełnienia zmiennych? Np. przypisuję do short dużą liczbę i chcę żeby tam znalazło się maksimum zakresu, a nie jakaś inna liczba, zależnie od tego jak mocno jest przepełniona.

Patrzę w te internety i słabo, więc na razie ogarniam to przez kilka if'ów, ale wydaje się mi to bez sensu

if (a+b*c/d > 32767)
x = 32767;
else
x = a+b*c/d;
Po co kod się ma wykonywać 2 razy i jako że mam dłuższe nazwy zmiennych i dłuższe równania to powstają mi molochy w tych ifach.
  • Najlepsze
  • Wszystkie komentarze
A.....k
A.....k
@majsterkong: unia?

Albo zapisz tylko najstarszy bajt. Albo zrób >>(logicznie w prawo) na zmiennej aż się zmieści?
p.....b
@majsterkong: Jeśli operujesz na

short
, to najprościej będzie powiększyć zakres
KrzaQ2
@majsterkong: To zaleƶy od tego, czy

sizeof(short) < sizeof(int)
. Jeśli tak jest, to prosta sprawa, wystarczy, ƶe porównasz pierw obliczony i zapisany
majsterkong
majsterkong
majsterkong Autor
0
@Analityk: Unia nie, zupełnie nie ten kierunek.

A pozostałe fałszują mi wynik, równie mocno, co zwykłe przypisanie zbyt dużej liczby.
PolCzlowiekPolLitra
@majsterkong: Czemu korzystasz z short?
majsterkong
majsterkong
majsterkong Autor
0
@PolCzlowiekPolLitra:

Bo akurat ten typ spełnia założenia mojej inżynierki w tym konkretnym przypadku.
PolCzlowiekPolLitra
@majsterkong: Nic mądrzejszego niż to co masz mi do głowy nie przychodzi. jeśli często tego używasz wrzuć to zwyczajnie w funkcję - jakieś ValidateShortInt czy cuś - chociaż mniejszy bałagan w kodzie
majsterkong
majsterkong
majsterkong Autor
0
@psychob: Wpadłem na takie same rozwiązanie jak napisałeś i wyciągnąłem to do zewnętrznej funkcji, która mi to kontroluje, kod trochę się wyczyścił.

Ale miałem taką cichą nadzieję na jakąś bardzo sprytną funkcje, bo taki przypadek wydaje mi się dość łatwy do zaistnienia czyli sprytna funkcja by się przydała.

Tak czy siak, dzięki wszystkim.
ponton
@majsterkong:

boost::numeric_cast