problem z pierwiastami, język C

klementa
Użytkownik
Użytkownik
Posty: 35
Rejestracja: 2 gru 2007, o 15:21
Płeć: Kobieta
Lokalizacja: Kraków
Podziękował: 11 razy

problem z pierwiastami, język C

Post autor: klementa »

Jak sprawdzić w języku C czy pierwiastek kwadratowy z danej liczby jest liczbą całkowitą?
Rafal88K
Użytkownik
Użytkownik
Posty: 311
Rejestracja: 15 mar 2007, o 16:52
Płeć: Mężczyzna
Lokalizacja: Lublin
Podziękował: 28 razy
Pomógł: 54 razy

problem z pierwiastami, język C

Post autor: Rafal88K »

Kod: Zaznacz cały

if(d == (int)d) {
   printf("Jest liczba calkowita.
");
}
Gdzie d jest pierwiastkiem z liczby.
mach12
Użytkownik
Użytkownik
Posty: 13
Rejestracja: 14 kwie 2008, o 14:27
Płeć: Mężczyzna
Lokalizacja: ---
Pomógł: 2 razy

problem z pierwiastami, język C

Post autor: mach12 »

Można posłużyć się funkcją floor(double n) z pliku math.h, która zaokrągla liczbę rzeczywistą do dołu. Nie narzucamy wtedy, że zmienna d musi mieścić się w zakresie int.

Kod: Zaznacz cały

if(d == floor(d))
{
  //
}
Xitami

problem z pierwiastami, język C

Post autor: Xitami »

Kod: Zaznacz cały

unsigned long isqrt(unsigned long x) {
    unsigned long op, res, one;

    op = x;     res = 0;
    one = 1 << 30; 
    while (one > op) 
        one >>= 2;
    while (one != 0) {
        if (op >= res + one) {
            op = op - (res + one);
            res = res +  2 * one;
        }
        res >>= 1;
        one >>= 2;
    }
    //  res == floor(sqr(x))
    //  op == 0  if  res^2 == x
    return(op==0);
}
ODPOWIEDZ