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

[C++] Zły wynik dla kodu: printf( "%.2lf", 4 / 9 )

Ostatnio zmodyfikowano 2015-02-04 19:50
Autor Wiadomość
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.
P-125911
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).
P-125912
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 ?
P-125916
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
P-125919
antonio12
Temat założony przez niniejszego użytkownika
» 2015-02-03 10:05:04
to każy kompilator może wypisać co innego ?
P-125925
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ć.
P-125931
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.
P-125937
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.
P-125995
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona