[C++] Zły wynik dla kodu: printf( "%.2lf", 4 / 9 )
Ostatnio zmodyfikowano 2015-02-04 19:50
antonio12 Temat założony przez niniejszego użytkownika |
» 2015-02-02 23:35:01 ok dzięki, a jeszcze mogłabyś pomóc w zrozumieniu mi 4 wypisu w printfcie ? Dlaczego wyświetla 0.5 a nie 0.44 , bo tutaj już pisaliście o tym ale nadal nie rozumiem. |
|
DejaVu |
» 2015-02-02 23:40:19 To też jest niezdefiniowane zachowanie. Te zadania są bezsensowne zważywszy na fakt, że dotyczą zapewne studentów, którzy raczej są zieloni z programowania i prowadzący na 95% nie zna poprawnych odpowiedzi, skoro wymaga odpowiedzi na takie pytania od uczniów. Sądzę, że cała argumentacja osoby prowadzącej ten przedmiot odnośnie oczekiwanych wyników sprowadza się do tego jaki wynik zwraca jego kompilator i jest ta osoba święcie przekonana, że to jest poprawną, oczekiwaną odpowiedzią (co jest oczywiście błędem). |
|
antonio12 Temat założony przez niniejszego użytkownika |
» 2015-02-03 00:58:37 Właśnie tak jest. Nie jestem dobry z programowania a chcę ten egzamin zaliczyć i nie wiem czy dam radę. To ktoś wytłumaczy dlaczego jest tam 0.5 a nie 0.44 ? |
|
Monika90 |
» 2015-02-03 08:14:38 Nie da się tego wytłumaczyć. double z =( ++z2 -( z1-- ) ) %--z1; dwukrotna modyfikacja zmiennej z1 bez ustalenia kolejności - zachowanie jest niezdefiniowane printf( "4) %.2lf\n", !( z1 % z2-- ) + 2.0 * z1 / z2 ); modyfikacja i odczyt zmiennej z2 bez ustalenia kolejności - zachowanie jest niezdefiniowane |
|
antonio12 Temat założony przez niniejszego użytkownika |
» 2015-02-03 10:05:04 to każy kompilator może wypisać co innego ? |
|
DejaVu |
» 2015-02-03 11:22:10 Kompilator niczego nie wypisuje. Każdy program może zachować się inaczej włącznie z tym, że może się wysypać. |
|
pekfos |
» 2015-02-03 12:42:48 to każy kompilator może wypisać co innego ? |
Wyniki mogą być różne nawet pod jednym kompilatorem, w zależności np od włączenia optymalizacji. |
|
antonio12 Temat założony przez niniejszego użytkownika |
» 2015-02-04 17:58:35 Jeszcze wracam do tego co napisała Monika wcześniej na temat operatora przesunięcia:
-2 zapisanie w kodzie uzupełnienia do dwóch wygląda tak 11111111111111111111111111111110 po przesunieciu o dwie pozycje w prawo wygląda tak (bit znaku jest kopiowany) 11111111111111111111111111111111 a to jest -1, czyli -2>>2 jest równe -1
jak to rozpoznać, że jest -1, bo tyle tych jedynek że nie widzę tego. Ogarniam system u1,u2 wiem jak zamieniać ale nie widzę tam tej -1. |
|
1 « 2 » 3 |