Problem z warunkiem dla if

Odpowiedz Nowy wątek
2011-07-16 02:21
0

Witam,

To jest mój pierwszy post, także na starcie przepraszam za wszystkie niejasności, ale do rzeczy. Od pewnego czasu "bawię" się C++ i dziś wieczorem natchnąłem się na pewien problem. A mianowicie z instrukcją if. Podpowiedziałby mi ktoś jak mam zapisać warunek, aby:

if(i/0.25 == coś)

gdzie "coś" będzie oznaczało liczbę naturalną? Innymi słowy: "jeśli i dzielone przez 0.25 da mi liczbę całkowitą to wykonaj instrukcje"? Nie wiem jak uzyskać właśnie tę liczbe całkowitą. Prawdopodobnie chodzi o jakąś operację matematyczną... Z góry dzięki za pomoc :)

pozdrawiam i liczę się z trywialnością mojego problemu :)

edytowany 1x, ostatnio: madmike, 2011-07-24 13:17

Pozostało 580 znaków

2011-07-16 03:51
szukajByło
0

Na problem mogłeś się co najwyżej "natknąć", nie "natchnąć". Nie każda liczba całkowita jest liczbą naturalną. Dzielenie przez 0.25 to nic innego jak mnożenie przez 4, jeżeli i jest liczbą całkowitą to wynik takiego dzielenia również musi być całkowity. Co do reszty to oczywiście było na forum, chociażby tutaj: http://4programmers.net/Forum/C_i_C++/129656-C++_ulamek_czy_calkowita

Pozostało 580 znaków

2011-07-16 07:33
w
0

if(i%0.25 ==0)
//instrukcje

Pozostało 580 znaków

2011-07-16 09:08
msm
0

@up - Modulo z liczb zmiennoprzecinkowych jest wolne. Nie żeby to było jakieś szczególnie ważne, ale w tym przypadku zmiana nic nie kosztuje a oszczędności (względne) są spore.

Mały benchmark dla 1000000 operacji:

modulo: 57333 ticks
dzielenie: 382 ticks

(edit - poprawiłem bo poprzednią wersję uruchomiłem w trybie debugowania...)

edytowany 4x, ostatnio: msm, 2011-07-16 09:15

Pozostało 580 znaków

2011-07-16 09:44
0

Ale nie dopowiedziałem że moje i też jest typu double... Czyli problem jest taki: jak znaleźć warunek na uzyskanie liczby całkowitej z dzielenia double przez double.

Nadal sobie nie poradziłem z tym...

edytowany 1x, ostatnio: lolek_asm, 2011-07-16 09:45

Pozostało 580 znaków

2011-07-16 09:51

chcesz sprawdzić czy wynikiem dzielenia jest liczba całkowita?

double wynik = i/0.25;
if(((int)wynik) == wynik)
    cout << "wynik to iczba całkowita" << endl;

lub

double wynik = i/0.25;
if(ceil(wynik) == wynik)
    cout << "wynik to iczba całkowita" << endl;

edytowany 1x, ostatnio: byku_guzio, 2011-07-16 09:53
To sprawdź swój kod dla odpowiednio dużej wartości i (dla innych wartości niż 0.25 też byłyby problemy)... Ogólnie najlepszy sposób podał enter_sandman w podlinkowanym wątku. - msm 2011-07-16 11:14
rzeczywiście z rzutowaniem na int może być zonk (nie pomyślałem o tym), rzutowanie na long long int powinno być ok, chyba że jeszcze jest jakiś inny problem. - byku_guzio 2011-07-16 11:48
lepsze jest użycie ceil/floor - byku_guzio 2011-07-16 11:50

Pozostało 580 znaków

2011-07-16 10:01
0

Dziekuje. :)

Pozostało 580 znaków

2011-07-16 10:20
:(
0
szukajByło napisał(a)

Dzielenie przez 0.25 to nic innego jak mnożenie przez 4
skończ najpierw podstawówkę potem się wypowiadaj.

Ekhm? 2/0.25 = 8 = 2 * 4 - Macron 2011-07-16 10:42

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0