Olimpiada AGH 2017 informatyka - pytanie o wartość ułamka zwykłego odnośnie do wyrażeń arytmetycznych

0

Cześć wszystkim

Rozwiązałem (chyba) jedno z pytań, które brzmi tak:

10. 
Rozważmy wartości wyrażeń zapisanych w języku np. C.
    A: wyrażenie 1/8*3; ma dokładnie wartość ułamka trzy ósme,
    B: wyrażenie 1/10*4; ma dokładnie wartość ułamka dwie piąte,
    C: wyrażenie 1./10*4.; ma dokładnie wartość ułamka dwie piąte,
    D: wyrażenie 3/8.*5; ma dokładnie wartość ułamka piętnaście ósmych,
    E: wyrażenie 3./8*5; ma dokładnie wartość ułamka piętnaście ósmych,
Które z powyższych zdań są prawdziwe:
a) wszystkie
b) tylko C, D i E
c) tylko D i E
d) tylko C i E

W kluczu poprawną odpowiedzią jest C, ale po przemyśleniu wyrażeń wychodziła mi odpowiedź B.
Popatrzyłem w klucz odpowiedzi i się zdziwiłem więc wykonałem test: https://wandbox.org/permlink/L3Ar30j15oiH7HPq
Z testu również wynika, że moje myślenie było poprawne. Czy prawidłowa odpowiedź może wynikać z tego, że autorowi pytania chodziło o wartość ułamka dwie piąte w postaci binarnej? Chodziło o to, że żadne wyrażenie nie da dokładnej wartości ułamka dwie piąte, bo ten ułamek jest błędnie zaokrąglany?

0

Gdzie masz w Twoim przykładzie wyrażenie 1/10*4?

0

Tego wyrażenia nawet nie sprawdzałem, bo wiadomo, że ułamek 1/10 jest błędnie zaokrąglany stąd pomnożenie go przez 4 nie da dokładnej wartości ułamka dwie piąte. Wyrażenie A zresztą to samo. Te 2 wyrażenia są brane pod uwagę tylko przy odpowiedzi a) wszystkie, a ona oczywiście jest błędna.

0

Zupełnie nie o to chodzi ;-)
1/10 = 0, bo próbujesz dzielić dwa inty; to zadanie sprawdza też wiedzę z rzutowania typów.

0

Z tego też sobie zdawałem sprawę. Wiadomo, że trzeba by te wyrażenia rzutować na double lub float jeśli już, bo przed przypisaniem to działanie jest wykonywane na typie int, który części ułamkowej nie posiada. Również dlatego testy dla tych wyrażeń odrzuciłem. Po prostu z rozpędu nie dopisałem tego w poście :)

0

Czyli jak w końcu?

Według nich D i E poprawne, a wychodzi CDE, zatem?

@Patryk27 coś miesza :P

0

Dokładnie. Kompilator pokazuje, że C, D i E są poprawne, a klucz, że D i E. W poleceniu nic nie ma właśnie o standardzie IEEE 754 napisane dlatego nie brałem na początku pod uwagę wartości binarnych ułamków przy wynikach, tylko ich wartości w systemie dziesiętnym.

Co do architektury to myślę, że autorzy pytań na tą olimpiadę układali pytania pod architekturę x86 chociaż oczywiście 100% pewności nie mam. Wydaję mi się jednak, że gdyby chodziło o inną architekturę to byłby odnośnik do niej w poleceniu pytania

5

Wszystko jest ok. A i B są błędne bo wynik to 0 bo to inty. C jest błędne bo to ułamek okresowy binarny. D i E są ok.

0

Uwagi do innych pytań z testu:

Pytanie 3:
W treści jest:

Rozważamy dowolne dwie dodatnie liczby typu zmiennoprzecinkowego takie, że f1 < f2.

Przy tym założeniu odpowiedź a) powinna być prawdziwa a reszta nierozważana. (Ewentualnie prawdziwe odpowiedzi a) i b)).
Wg klucza: b)

Pytanie 37:
W odpowiedzi c) troszkę za dużo tych zer. Dlatego prawidłowa powinna być e)
Wg klucza: c)

0

Co do pytania 37 masz rację, ale w 3 pytaniu raczej chodziło im o przykład, który zapisali poniżej. Nie zmienia to faktu, że dla niektórych takie sformułowanie pytania jest rzeczywiście mylące.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0