wartość int w C++

sportowiec1993
Użytkownik
Użytkownik
Posty: 202
Rejestracja: 19 wrz 2009, o 19:59
Płeć: Mężczyzna
Lokalizacja: małopolska
Podziękował: 5 razy

wartość int w C++

Post autor: sportowiec1993 »

jak sprawdzić w C++ czy dana liczba jest całkowita ?
bo wiem, że to jakoś można było zrobić przy pomocy static_cast<>
ale nie za bardzo mogę sobie przypomnieć
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

wartość int w C++

Post autor: Afish »

Zakładam, że liczba jest typu double:

Kod: Zaznacz cały

if( fabs (liczba) -   floor( fabs(liczba) ) ) < epsilon ){
//jest całkowita
}
Epsilon to ustalona wartość, która oznacza, jak duże odchyły tolerujemy (ze względu na niedokładność reprezentacji bitowej).Ze static_cast nie korzystaj, bo zbyt duża liczba nie zmieści się w typie int.
sportowiec1993
Użytkownik
Użytkownik
Posty: 202
Rejestracja: 19 wrz 2009, o 19:59
Płeć: Mężczyzna
Lokalizacja: małopolska
Podziękował: 5 razy

wartość int w C++

Post autor: sportowiec1993 »

mi to było potrzebne do takiego zadania i tam raczej nie ma dużych liczb (chyba do 100)
i chciałem np. sprawdzić czy 105 jest kwadratem liczby naturalnej
no i właśnie chciałem to zrobić metodą jeśli sqrt(n) jest całkowite to n jest kwadratem
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

wartość int w C++

Post autor: Afish »

To powinieneś to zrobić inaczej. Obliczasz pierwiastek, bierzesz podłogę z wyniku, podnosisz do kwadratu i sprawdzasz, czy jest równy wyjściowej liczbie. Przy takich liczbach możesz używać rzutowania (pamiętaj tylko, że ono jest dość wolne).
Lae
Użytkownik
Użytkownik
Posty: 1
Rejestracja: 18 lip 2010, o 02:26
Płeć: Mężczyzna
Lokalizacja: Gliwice

wartość int w C++

Post autor: Lae »

A nie można by tak:

Kod: Zaznacz cały

if ((liczba%1)==0) {
     //i tu coś tam
}
Afish
Moderator
Moderator
Posty: 2828
Rejestracja: 15 cze 2008, o 15:45
Płeć: Mężczyzna
Lokalizacja: Seattle, WA
Podziękował: 3 razy
Pomógł: 356 razy

wartość int w C++

Post autor: Afish »

Nie. No chyba że liczba jest typu int - ale wtedy nie ma sensu sprawdzać, czy liczba jest całkowita.
Awatar użytkownika
kadiii
Użytkownik
Użytkownik
Posty: 642
Rejestracja: 20 gru 2005, o 21:04
Płeć: Mężczyzna
Lokalizacja: Wrocław
Pomógł: 130 razy

wartość int w C++

Post autor: kadiii »

dla "małych liczb"

Kod: Zaznacz cały

if(liczba==(int)liczba)
Awatar użytkownika
Mariusz M
Użytkownik
Użytkownik
Posty: 6909
Rejestracja: 25 wrz 2007, o 01:03
Płeć: Mężczyzna
Lokalizacja: 53°02'N 18°35'E
Podziękował: 2 razy
Pomógł: 1246 razy

wartość int w C++

Post autor: Mariusz M »

Można też użyć funkcji ceil() i floor()
czyli sufit i podłoga

No tak czyli już Afish o tym napisał
i dla większych liczb to chyba najlepsze rozwiązanie
Awatar użytkownika
Szemek
Użytkownik
Użytkownik
Posty: 4819
Rejestracja: 10 paź 2006, o 23:03
Płeć: Mężczyzna
Lokalizacja: Gdańsk
Podziękował: 43 razy
Pomógł: 1407 razy

wartość int w C++

Post autor: Szemek »

typeid

Kod: Zaznacz cały

http://www.cplusplus.com/doc/tutorial/typecasting/
Laurearel

wartość int w C++

Post autor: Laurearel »

sportowiec1993 pisze:bo wiem, że to jakoś można było zrobić przy pomocy static_cast<>
static_cast służy do rzutowania...
ODPOWIEDZ