Pregunta

Sé que esta es una pregunta duplicada.pero quiero saberlo con un ejemplo.¿Alguien puede explicarlo con un ejemplo?

Enlace a publicación duplicada: ¿Cuándo debo utilizar la palabra clave "strictfp" en Java?

¿Fue útil?

Solución

Bueno, la respuesta de Girinie lo resume muy bien, pero si buscas un ejemplo...

Digamos que creaste un juego que permite enviar puntuaciones más altas, pero solo después de que el servidor valida la puntuación.Un método para validar la puntuación es hacer que el cliente envíe las pulsaciones de teclas (y sus marcas de tiempo) al servidor.Lo ideal sería que el servidor jugara exactamente el mismo juego y obtuviera la misma puntuación.

Ahora, digamos que tu juego tiene algunas físicas que pueden alterar el resultado del juego (p. ej.una explosión que arroja escombros al azar que PODRÍAN lastimarte si impacta).

La física de ese juego podría ser potencialmente diferente en el servidor (aunque sea ligeramente) que en el cliente (por ejemplo, si se convierte a números enteros para la detección de colisiones, se redondeó abajo en lugar de arriba).En un caso límite como ese, podría tener una situación en la que el juego del cliente fuera no golpeado por los escombros de la explosión, pero el juego del servidor era - y ahora tienes una diferencia en la puntuación, lo que podría invalidar incorrectamente un envío de puntuación más alta

Mientras strictfp Ciertamente no es una solución milagrosa, pero contribuye en gran medida a imponer cierta coherencia en la "reproducción" de instrucciones en diferentes plataformas.

Otros consejos

Esto es lo que el especificación del lenguaje Java dice:

  

En una expresión FP-estricta, todo   valores intermedios deben ser elementos   del valor flotante SET o el doble   valor establecido, lo que implica que los resultados   de todas las expresiones FP-estrictos deben estar   las predichas por IEEE 754 aritmética   sobre operandos representado usando solo   y formatos dobles. Al cabo de una   expresión que no es FP-estricta, algunos   margen de maniobra se concede por una   aplicación para utilizar un prolongado   gama exponente para representar   resultados intermedios; el efecto neto,   en términos generales, es que una   cálculo podría producir "la correcta   respuesta" en situaciones en exclusiva   uso del conjunto de valor flotante o doble   conjunto de valores podría resultar en desbordamiento o   underflow.

Lo que esto significa es la siguiente: aritmética de punto flotante (es decir, cálculos que implican los tipos float y double) en Java se especifica a ADHER a la IEEE 754 estándar , que dice exactamente cómo representar los números de PF. El problema es que los CPU modernos utilizan internamente FP aritmética que no ADHER a ese estándar para los resultados intermedios - esto no es generalmente un problema, ya que en realidad es más rápido y produce resultados más exactos. Pero podría significar que un programa produce resultados ligeramente diferentes dependiendo de qué tipo de hardware que se ejecuta en - lo cual está en contra de la promesa básica de la plataforma de la independencia de Java.

La palabra clave strictfp le permite asegurarse de que esta promesa se mantiene y el programa va a tener exactamente el mismo resultado, sin importar dónde se dirige - pero esto viene a costa de un menor rendimiento en el hardware donde debe gastarse esfuerzo extra para hacer los cálculos de PF ADHER a IEEE 754 en todos los resultados intermedios.

La mayoría de las veces, se rahter tendríamos un mejor rendimiento en lugar de idénticos resultados garantizados en todas las plataformas, y es por eso que el comportamiento strictfp es opcional. De hecho, fue hechos opcional en Java 1.4 después de los ejecutores de JVM se dio cuenta de que tenían que hacer que la CPU hacer trabajo extra para ADHER a la especificación cuando la mayoría de las veces esta adhesión estricta no tenían ventajas.

strictfp su muy especial.

Vamos a ver con un Un ejemplo Agencia espacio .

El código escrito utiliza números científicos muy específicos, ahora esto Números están en decimales multi-colocado .

Estos decimales valor de efectos de la trayectoria de la trayectoria de la nave espacial, que es efectuada por mis constantes tales como la fricción, la gravedad, el calor, la humedad, el sol de rayos recibida, la electricidad generada, el cuerpo gravitacional múltiple , la velocidad de combustión eficiente.

El punto principal es que cuando los datos se envía para su evaluación para realizar un seguimiento de la nave, que debe devolver el valor que es igual para plataforma diferente lo demás que van a recibir datos que es ligeramente diferente en valor decimal.

Sin embargo, esto no se considera tan pequeña diferencia, ya que dará lugar a la nave para desviar de su trayectoria, Recuerde cálculo deferente, cada pequeña trayectoria de puntos marca, por lo que nuestra cálculo debe ser muy específico y constante, incluso para diferentes plataforma, se debe tener standers y exactitud precis.

Para este requisito tenemos strictfp en Java.

¿Quieres un programa para demostrar que, su difícil demostrar esto con precisión con un pequeño programa .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top