2011-02-16 13 views

Respuesta

14

De MSDN

Además, la pérdida de precisión que resulta de la aritmética, asignación, y análisis de operaciones con valores Double pueden diferir por plataforma. Por ejemplo, el resultado de asignación de un valor doble literal puede difieren en el de 32 bits y de 64 bits versiones del .NET Framework

Hope que ayuda.

+3

Tenga en cuenta que los resultados * * siempre están garantizados para ser compatibles con IEEE-754, pero esa especificación permite una cierta cantidad de margen (por ejemplo, se permite que los resultados sean más precisos que los especificados precisión mínima). – LukeH

5

No, no es lo mismo. Podría compilarse con instrucciones x87 o SSE que funcionen de manera diferente (por ejemplo, con respecto al soporte de denorm). No encontré forma de forzar .net a usar matemática reproducible de punto flotante.

hay algunas alternativas, pero todos ellos son lentos y algunos son mucho trabajo:

  • implementar su propio número flotante/de punto fijo.
    • fijo de 32 bits no son demasiado difíciles de codificar. Pero su alcance y precisión limitados los hacen difíciles de trabajar. Log y Sqrt serán lentos. Si quieres puedo sacar mi código sin terminar para esto.
    • de punto fijo de 64 bits son mejores para trabajar. Pero no puede implementarlos fácilmente en modo de alto rendimiento en el código de bytes, ya que algunos valores intermedios son 96-128 bits para los cuales CLR no ofrece soporte.
    • punto flotante (consideraría la mantisa de 32 bits y el exponente de 16 bits) son agradables para trabajar, pero difíciles de implementar. Como para evitar la pérdida de precisión, necesita una forma rápida de encontrar el bit más alto que no sea cero. Y no hay BitScanForward/Reverse intrinsics en C# /. Net.
  • Mover todo el código de matemáticas en las bibliotecas nativas, ya que por lo que leí se puede obligar a la mayoría de los compiladores de C++ en la creación de código de punto flotante reproducible.
  • Decimal se implementa en el software y, por tanto, probablemente también reproducible, pero tampoco es rápido.
0

No lo creo así.Frases tales como:

El tamaño de la representación interna flotante es dependiente de la implementación, puede variar, y deberá tener una precisión al menos tan grande como la de la variable o expresión que se representa

y:

Este diseño permite la CLI para elegir una representación de alto rendimiento específico de la plataforma para números de punto flotante hasta que se colocan en el almacenamiento l ocaciones. Por ejemplo, podría dejar variables de coma flotante en los registros de hardware que proporcionan más precisión que la solicitada por el usuario. Al mismo tiempo , generadores CIL pueden obligar a las operaciones de respetar las reglas específicas del idioma para las representaciones a través el uso de instrucciones de conversión

de la sección 12.1.3 de la EM partición yo tendería a indicar que se pueden producir diferencias de redondeo si todas las operaciones se realizan dentro de la representación interna

Cuestiones relacionadas