Domanda

So che questo è un duplicato domanda.ma io voglio sapere con un esempio.così qualcuno può spiegare con un esempio?

Link per duplicare i post: Quando devo usare il "strictfp" parola chiave, in java?

È stato utile?

Soluzione

Beh, girinie risposta riassume bene ma, se siete alla ricerca di un esempio ..

Diciamo che hai fatto un gioco che permette di highscore contributi, ma solo dopo che il server convalida il punteggio.Un metodo per convalidare il punteggio è di avere il client invia i tasti premuti (e i loro timestamp) al server.Idealmente, il server di gioco attraverso il stesso esatto gioco e di ottenere lo stesso punteggio.

Ora, supponiamo che il tuo gioco ha un po ' di fisica che può alterare l'esito del gioco (ad es.un'esplosione di lancio casuale di detriti che POTREBBE farti del male, se va a segno).

La fisica di gioco che potenzialmente potrebbe essere diverso sul server (anche se di poco) rispetto al client (ad esempio, se la conversione di numeri interi per il rilevamento di collisione, è stato arrotondato giù invece di fino).In un caso limite come questo, si può avere una situazione in cui il client di gioco è stato non colpito da detriti dell'esplosione, ma il server di gioco era - e ora abbiamo una differenza di punteggio, che potrebbe erroneamente invalidare un punteggio di presentazione

Mentre strictfp certamente non è un proiettile d'argento, va un senso lungo nell'imporre una qualche consistenza di 'riproduzione' di istruzioni su diverse piattaforme.

Altri suggerimenti

Questo è ciò che il linguaggio Java spec dice:

  

In un'espressione FP-strict, tutto   valori intermedi devono essere elementi   del valore float impostare o doppio   valore impostato, il che implica che i risultati   di tutte le espressioni FP-severe devono essere   quelli previsti da IEEE 754 aritmetico   su operandi rappresentati impiegando singola   e doppi formati. all'interno di un   espressione che non è FP-strict, un po '   margine di manovra è concesso per un   implementazione di utilizzare un prolungato   gamma esponente a rappresentare   risultati intermedi; l'effetto netto,   grosso modo, è che un   calcolo potrebbe produrre "il corretto   risposta" in situazioni in cui esclusiva   uso del valore impostato float o doppio   valore impostato potrebbe causare overflow o   underflow.

Ciò significa questo: aritmetica in virgola mobile (cioè calcoli che coinvolgono i tipi float e double) in Java è specificato alla aderiscono alla IEEE 754 standard, che dice esattamente come rappresentare i numeri FP. Il problema è che le CPU moderni usano internamente FP aritmetica che non aderiscono alla quella standard per i risultati intermedi - questo non è generalmente un problema, perché in realtà è più veloce e produce risultati più precisi. Ma potrebbe significare che un programma produce risultati leggermente diversi a seconda di quale hardware si gira su -, che è contro la promessa di base della piattaforma indipendenza di Java.

La parola chiave strictfp consente di garantire che questa promessa è mantenuta e il programma avrà esattamente lo stesso risultato, non importa dove si corre - ma questo viene a costo di prestazioni inferiori su hardware in cui sforzo in più deve essere spesa per fare i calcoli FP aderiscono alla IEEE 754 su tutti i risultati intermedi.

La maggior parte del tempo, si sarebbe rahter avere prestazioni migliori, piuttosto che risultati identici garantiti tra le piattaforme, ed è per questo comportamento strictfp è opzionale. In realtà è stato fatto Extra in Java 1.4, dopo implementatori JVM capito che avevano per rendere la CPU fare un lavoro extra per aderiscono alla spec quando la maggior parte del tempo come ad aderenza rigorosa avuto nessun vantaggio.

strictf sua molto speciale.

Vediamo con un Un esempio locale Agenzia .

Il codice scritto utilizza molto specifiche Numbers scientifici, ora questo numeri sono in decimali multi-posto .

Questi decimali valutano gli effetti della traiettoria del sentiero nave spaziale, che viene effettuata mediante le costanti quali attrito, gravità, calore, umidità, sole raggi ricevuto, elettricità generata, corpo gravitazionale multiplo , velocità, canna fumaria efficiente.

Il punto principale è che quando i dati sono di inviare per la valutazione di tenere traccia della nave, è dovrebbe restituire il valore che è uguale per piattaforma diversa altra cosa che riceverà i dati che è leggermente diverso in valore decimale.

Ma questo non è considerare come piccola differenza, come si comporterà la nave di deviare dalla sua traiettoria, Remember calcolo deferente, ogni piccolo puntino make traiettoria, così la nostra calcolo deve essere molto specifico e coerente anche per diverse piattaforma, deve avere standers e la precisione precis.

Per questa esigenza abbiamo strictf in Java.

Si desidera un programma volto a dimostrare che, la sua difficile mostrare questo preciso con un piccolo programma .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top