2014-06-08 17 views
5

Qualcuno ha chiesto a questa domanda su un concorso di programmazione: -Utilizzando operatore modulo con i galleggianti

-1% 1.000.000,009 mila è -1 o 1000000008

voglio sapere, questo è ancora possibile? Ho provato nel mio sistema, ho ottenuto -1 ogni volta. Inoltre, ho dovuto scoprire 10^-9% 10^9, ho usato fmod e ho ottenuto la risposta 1e-009, non dovrebbe essere 1?

La mia interpretazione: - 10^-9/10^9 = 1/10^18 Quindi, la risposta = 1.

dirmi dove sbaglio.

anteprima
+0

Come per la tua domanda 'fmod': [Cosa dovrebbe sapere ogni programmatore su aritmetica in virgola mobile] (http://floating-point-gui.de). – usr2564301

+1

@Jongware Sto scrivendo un programma, quindi ho bisogno di una visione chiara di cosa succede all'interno del programma. Questo non sta aiutando. Qualsiasi altro aiuto? – unixia

+1

'%' non è un operatore a virgola mobile –

risposta

3

: (mi riferirò mod come %)

Proprio come in 1%3, facciamo (int) 1/3 che è 0, e poi ci chiediamo: quanti aggiungere al fine di ottenere 1?

la risposta è 1.

così 1%3=1.


Guardando 10^-9 % 10^9

usiamo altri numeri, per chiarezza:

2^-3 % 2^3

prima abbiamo CALC il valore intero della deviazione:

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

, come si può vedere si tratta di un piccolo numero

così la parte int è 0.

così - quanti da aggiungere al fine di ottenere 2^-3? che è di destra: 2^-3


quanto riguarda la tua domanda esatta:

La mia interpretazione: - 10^-9/10^9 = 1/10^18 Quindi, la risposta = 1.

1/10^18 anzi.

qual è la parte intera? a zero.

da quello zero, quanto dobbiamo aggiungere per arrivare a -1?

yup, -1.

basta seguire le regole di Modulo.

trovare prima la deviazione intera. e poi chiedi: quanto dobbiamo aggiungere per arrivare al numeratore.

edit:

per una situazione in cui il numeratore> denominatore

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

a meno di notare.

questo è 1 volte 5.

ok così da 1 volte 5 - quanto ci vuole per andare a 7? Sì: 2.

più avanzato:

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

ma questo è 1 volte su 2.

in modo da 1 volte su 2 - quanto ci vuole per andare a 3.111? sì 1.111

+0

Significa che in ogni caso tale che il numeratore è un punto fluttuante e il denominatore è di tipo intero e molto più grande del float, la risposta sarebbe solo il float (inizialmente numeratore)? – unixia

+0

@ user3715736 anche se il numeratore galleggia con le arance e il denominatore ha mele con numeri interi: prima (!) Prendi la parte iteger del risultato (!) Quindi '2.111% 3 => 2.111/3 => 0.7033 =>. 7033 vai all'inferno => sei rimasto con 0 => quindi quanto dobbiamo arrivare a 2.111? 2.111' –

+1

'%' non funziona con i tipi a virgola mobile. Non puoi scrivere '3.111% 2' –

Problemi correlati