El conjunto de instrucciones x86 tiene problemas de consistencia de punto flotante complicado debido a la forma en que funciona la FPU. Los cálculos internos se realizan con bits más significativos que los que se pueden almacenar en un doble, lo que causa el truncamiento cuando el número se vacía desde la pila FPU a la memoria.
Eso se corrigió en el compilador x64 JIT, usa instrucciones SSE, los registros SSE tienen el mismo tamaño que un doble.
Esto lo va a pasar cuando sus cálculos prueban los límites de precisión y rango de coma flotante. Nunca querrá acercarse a necesitar más de 15 dígitos significativos, nunca querrá acercarse a 10E308 o 10E-308. Ciertamente, nunca desea cuadrar el mayor valor representable. Esto nunca es un problema real, los números que representan cantidades físicas no se acercan.
Aproveche esta oportunidad para averiguar cuál es el problema en sus cálculos. Es muy importante que ejecute el mismo sistema operativo y el mismo hardware que usa su cliente, a la vez que obtiene las máquinas necesarias para hacerlo. El código de envío que solo se prueba en la máquina x86 no se prueba.
La corrección D & D es Project + Properties, pestaña Compilar, Platform Target = x86.
Fwiw, el mal resultado en x86 es causado por un error en el compilador JIT.Se genera este código:
double r = Math.Sqrt(v1 * v1);
00000006 fld dword ptr ds:[009D1578h]
0000000c fsqrt
0000000e fstp qword ptr [ebp-8]
La instrucción FMUL falta, eliminado por el optimizador de código en modo de lanzamiento. Sin duda se desencadenó al ver el valor en double.MaxValue. Es un error, puede informarlo en connect.microsoft.com. Sin embargo, estoy bastante seguro de que no lo arreglarán.
Entrega '+ inf' en máquinas de 32 y 64 bits aquí. – Joey