2014-06-08 10 views
5

Ktoś zadał to pytanie w konkursie programowania: -Korzystanie operator moduł z pływaków

-1% -1 1000000009 lub 1000000008

Chcę wiedzieć, czy jest to w ogóle możliwe? Próbowałem w moim systemie, otrzymałem -1 za każdym razem. Również musiałem się dowiedzieć 10^-9% 10^9, użyłem fmod i otrzymałem odpowiedź 1e-009, czyż nie powinno być 1?

Moja interpretacja: - 10^-9/10^9 = 1/10^18 Więc odpowiedź = 1.

Proszę mi powiedzieć, gdzie się mylę.

+0

Co do Twojego pytania "fmod": [Co każdy programista powinien wiedzieć o arytmetyki zmiennoprzecinkowej] (http://floating-point-gui.de). – usr2564301

+1

@Jongware Piszę program, więc potrzebuję jasnego obrazu tego, co dzieje się wewnątrz programu. To nie pomaga. Każda inna pomoc? – unixia

+1

'%' nie jest operatorem zmiennoprzecinkowym –

Odpowiedz

3

preview: (i skieruje mod jako %)

Podobnie jak w 1%3 robimy (int) 1/3 który jest 0, a potem zapytać: ile dodać w celu uzyskania 1?

odpowiedź brzmi: 1.

tak 1%3=1.


Patrząc na 10^-9 % 10^9

użyjmy kolejne numery, dla jasności:

2^-3 % 2^3

najpierw calc wartość całkowitą odchylenia:

2^-3/2^3 = 1/(2^3 * 2^3) = 1/64

jak widać jest to niewielka liczba

więc int część 0.

tak - ile by dodać w celu uzyskania 2^-3? to prawda: 2^-3


dotyczące dokładnej pytanie:

Moja interpretacja: - 10^-9/10^9 = 1/10^18 Więc odpowiedź = 1.

1/10^18 Rzeczywiście.

co to jest część całkowita? a zero.

od tego zera, ile potrzebujemy dodać, aby uzyskać -1?

yup, -1.

postępuj zgodnie z zasadami Modulo.

najpierw znajdź odchylenie całkowite. a następnie zapytaj: ile musimy dodać, aby dostać się do licznika.

edit:

do sytuacji, w której licznik> mianownik

7 % 5 = > 7 /5 => 1.4 => .4 go to hell = > you're left with 1.

ale uprzedzenia.

to 1 razy 5.

ok więc od 1 razy 5 - ile trzeba, aby przejść do 7? tak: 2.

bardziej zaawansowane:

3.111 %2 = > 3.111/2 = > 1.5555 => .555 go to hell => you're left with 1.

ale to 1 czasy 2.

Tak więc od 1 razy 2 - ile trzeba, aby przejść do 3.111? tak 1.111

+0

Czy oznacza to, że w każdym przypadku tak, że licznik jest zmiennoprzecinkowy, a mianownik jest typem całkowitym i jest większy niż zmiennoprzecinkowy, odpowiedź byłaby tylko zmienną (początkowo licznik)? – unixia

+0

@ user3715736 nawet jeśli licznik unoszą się z pomarańczami, a mianownik ma jabłka z liczbami całkowitymi: najpierw (!) Weź część główną wyniku (!), Więc '2.111% 3 => 2.111/3 => 0.7033 =>. 7033 idź do piekła => zostaje ci 0 => więc ile potrzebujemy dostać do 2.111? 2.111' –

+1

'%' nie działa z typami zmiennoprzecinkowymi. Nie możesz napisać '3.111% 2' –

Powiązane problemy