Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Rzutowanie typów

Ostatnio zmodyfikowano 2017-02-15 22:05
Autor Wiadomość
milmega
Temat założony przez niniejszego użytkownika
Rzutowanie typów
» 2017-02-15 17:58:04
Zaimplementuj funkcje int Floor(double value) która zaokrągla liczby w dół do najbliższej całości np.
Z liczby π ≈ 3.141592..  zwróci liczbe 3.
Dla liczby 99.999999 .. zwróci liczbę 99.
Ale dla ujemnej liczby np. -149.99 zwróci liczbę -150
C/C++
int Floor( double value )
{
}
P-157751
jankowalski25
» 2017-02-15 18:10:28
Z liczby π ≈ 3.141592..  zwróci liczbe 3.
Dla liczby 99.999999 .. zwróci liczbę 99.
W najprostszych przypadkach wystarczy zwykłe rzutowanie.
Ale dla ujemnej liczby np. -149.99 zwróci liczbę -150
Przy liczbach ujemnych wystarczy nieznacznie zmodyfikować wynik rzutowania.

Czy musisz obsługiwać przypadki szczególne (na przykład
NaN
)?
P-157752
milmega
Temat założony przez niniejszego użytkownika
» 2017-02-15 18:42:14
Muszę obsługiwać poszczególne przypadki. Przy minusowych wystarczy, że odejmę 1, ale nie wiem jak to zrobić, żeby działało i na minusowe i na dodatnie.
C/C++
int Floor( double value )
{
    value =( int ) value; //dla dodatnich
    return value;
   
    value -= 1;
    value =( int ) value; //dla minusowch
    return value;
   
}
P-157757
karambaHZP
» 2017-02-15 18:45:56
P-157758
jankowalski25
» 2017-02-15 19:01:50
value =( int ) value;
Dodaj jeszcze
static_cast
, aby rzutowanie było lepiej widoczne (w wielu przypadkach nieprawidłowe rzutowanie jest przyczyną różnych problemów).

Dopisano:
C/C++
value -= 1;
value =( int ) value; //dla minusowch
return value;
C/C++
Floor( - 1.000000 ); //-2
To nie powinno tak działać. Uwzględnij jeszcze przypadki, gdy część ułamkowa jest zerem.
P-157760
milmega
Temat założony przez niniejszego użytkownika
» 2017-02-15 19:39:51
Wszystko działa w testach oprócz jednego. Nie działa dla liczby -5.000000 (double)
C/C++
int Floor( double value )
{
    if( value > 0 )
    {
        value =( int ) value;
       
        return value;
    }
    else if( value < 0 )
    {
        value -= 1;
        value =( int ) value;
        return value;
    }
    return value;
}
P-157763
czaffik
» 2017-02-15 22:05:39
Nie działa dla liczby -5.00000... gdyż: patrz post użytkownika jankowalski25.
Musisz sprawdzić czy część ułamkowa w przypadku liczb ujemnych jest równa zero, jeśli tak to nie dodajesz -1, jeśli nie to dodajesz -1.
P-157775
« 1 »
  Strona 1 z 1