Sztuczki i haczyki II

2008-06-09 | by muczachan |

Poprzednio było o konieczności uważania na optymalizację, dzisiaj o kolejności wykonywania działań. Notacja skrócona, ale tym razem chyba jasna. ‘x’ jest globalne.

F() = x++; return 2^x
G() = x++; return 3^x
H() = x++; return 5^x

Jaki będzie wynik x=1; return F() * (G() + H())? Bez jakiejkolwiek optymalizacji, tym haczykiem proszę się nie przejmować.

a) w C/C++;
b) Java
c) C#.

Zadanie dodatkowe: co kompilator z czymś takim zazwyczaj robi?

Zadanie z gwiazdką: kiedy a+(b+c) będzie różne od (a+b)+c?

  1. 3 Responses to “Sztuczki i haczyki II”

  2. By bif on 2008-06-10 | Reply

    no nic, juz to obgadalem, ale napisze dla potomnosci

    mylilem sie sadzac, ze C bedzie ewaluowac funkcje po kolei od lewej do prawej

    znaczy tak wlasnie robia znane mi kompilatory, ale nie jest to gwarantowane przez standard, w odroznieniu do Javy i C#.

    z gwiazdka: overflowy jakies? dodawanie signed i unsigned?

  3. By komutator on 2008-10-11 | Reply

    W kwestii gwiazdki – Jak się przeciąży operator, to różne zabawne rzeczy mogą wyjść.

  4. By Tener on 2008-11-02 | Reply

    (a+b)+c != a+(b+c) : Chyba najczęstszy przypadek występuje dla odpowiednich liczb zmiennoprzecinkowych a,b,c.

Post a Comment