Question

Je sais que c'est une double question. mais je veux savoir avec un exemple. si quelqu'un peut l'expliquer avec un exemple?

Lien vers dupliquer message: Quand dois-je utiliser le mot-clé « strictfp » dans java

Était-ce utile?

La solution

Eh bien, la réponse de girinie cela résume bien, mais si vous cherchez un exemple ..

Disons que vous avez fait un jeu qui permet des soumissions de highscore, mais seulement après que le serveur valide le score. Une méthode pour valider le score est d'avoir le client envoie les (et leurs pressions sur les touches) horodatages au serveur. Idéalement, le serveur serait alors jouer à travers exactement le même jeu et obtenir le même score.

Maintenant, supposons que votre jeu a un peu de physique qui peut modifier le résultat du jeu (par exemple une explosion lancer des débris au hasard qui pourrait vous faire du mal, si elle frappe).

La physique de ce jeu potentiellement pourraient être différentes sur le serveur (même si elle est légèrement) que le client (par exemple, si la conversion en nombres entiers pour la détection de collision, il a été arrondi bas au lieu de < em> up ). Sur un cas limite comme ça, vous pourriez avoir une situation où le jeu client était pas frappé par des débris de l'explosion, mais le jeu du serveur n'a - et maintenant vous avez un différence de score, ce qui pourrait invalider de manière incorrecte une soumission de highscore

Alors que strictfp est certainement pas une balle d'argent, il va un long chemin à imposer une certaine cohérence de « rejouant » des instructions sur différentes plates-formes.

Autres conseils

est ce que la spécification du langage java dit:

  

Dans une expression FP-stricte, tout   les valeurs intermédiaires doivent être des éléments   de la valeur flottante définir ou double   mis en valeur, ce qui implique que les résultats   de toutes les expressions FP-strictes doivent être   celles prévues par la norme IEEE 754 arithmétique   sur des opérandes représentés en utilisant unique   et les formats double. Au sein d'une   expression qui n'est pas FP stricte, certains   une marge de manœuvre est accordée pour une   la mise en œuvre d'utiliser une extension   gamme exposant pour représenter   les résultats intermédiaires; l'effet net,   grosso modo, est que   calcul pourrait produire « correct   réponse » dans des situations où exclusive   l'utilisation de l'ensemble de valeur flottante ou double   jeu de valeur peut entraîner un débordement ou   underflow.

Qu'est-ce que cela signifie est le suivant: l'arithmétique en virgule flottante (à savoir les calculs concernant les types de float et double) en Java est spécifié à Adher à la balise IEEE 754 standard , qui dit exactement comment représenter les nombres de PF. Le problème est que les processeurs modernes utilisent l'arithmétique interne FP qui n'Adher pas à cette norme pour les résultats intermédiaires - ce ne sont généralement pas un problème, car il est en fait à la fois plus rapide et donne des résultats plus précis. Mais cela pourrait signifier qu'un programme produit des résultats légèrement différents en fonction du matériel, il fonctionne sur - ce qui est contraire à la promesse de base de la plate-forme Java independance.

Le mot-clé strictfp vous permet de faire en sorte que cette promesse est tenue et le programme ont exactement le même résultat, peu importe où il court - mais cela se fait au détriment de la performance plus faible sur le matériel où il faut dépenser un effort supplémentaire pour faire les calculs de PF Adher à IEEE 754 sur tous les résultats intermédiaires.

La plupart du temps, vous auriez rahter ont de meilleures performances plutôt que des résultats identiques garantis sur toutes les plateformes, et c'est pourquoi le comportement strictfp est facultatif. En fait, il était en en option Java 1.4 après implementors JVM réalisé qu'ils devaient faire de la CPU faire un travail supplémentaire pour Adher à la spécification lorsque la plupart du temps cette adhésion stricte n'a pas d'avantages.

strictfp son très spécial.

Voyons avec Un exemple de l'Agence spatiale .

Le code écrit utilise des chiffres scientifiques très spécifiques, maintenant ce sont les numéros plusieurs décimales placé .

Ces décimaux évaluent les effets de la trajectoire de la voie de vaisseau spatial, qui est effectuée par mes constantes telles que la friction, la gravité, la chaleur, l'humidité, soleil à rayons reçus, l'électricité produite, le corps gravitationnel multiple , la vitesse, cheminée efficace.

Le point principal est que lorsque les données sont envoyées pour l'évaluation de garder une trace du navire, il doit renvoyer la valeur qui est la même pour les différentes plates-formes sinon nous recevoir des données qui est légèrement différente La valeur décimale.

Mais cela considère pas comme petite différence, car il entraînera le navire à détourner de sa trajectoire, Rappelez-vous le calcul déférent, chaque petite trajectoire de marque de points, de sorte que notre calcul doit être très précis et cohérent même différent la plate-forme, il doit avoir verticalisation et précision precis.

Pour cette exigence, nous avons strictfp en java.

Vous voulez un programme pour le démontrer, il est difficile de montrer avec précision avec un petit programme .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top