Um cálculo de ponto flutuante pode diferir em processadores diferentes?(+passagem dupla entre C# e C)

StackOverflow https://stackoverflow.com/questions/2335529

Pergunta

Tenho um aplicativo escrito em C# que também invoca algum código C.O código C# obtém um double como entrada, realiza alguns cálculos nele, passa-o para a camada nativa que realiza seus próprios cálculos e depois passa de volta para a camada C#.

Se eu executar os mesmos exe/dlls em máquinas diferentes (todas elas são x64 da Intel), é possível que o resultado final obtido seja diferente em máquinas diferentes?

Foi útil?

Solução

Se você usar os mesmos executáveis, os resultados deverão ser os mesmos.No entanto, vale a pena notar que os cálculos de ponto flutuante são geralmente altamente personalizáveis ​​por uma série de configurações persistentes (modo infinito, modo de arredondamento, etc.).Isto significa que a mesma instrução de ponto flutuante pode produzir resultados diferentes dependendo da combinação atual de configurações.Se o seu aplicativo garantir que todas essas configurações sejam redefinidas para os mesmos valores no início da execução, os resultados deverão ser os mesmos.No entanto, se algumas dessas configurações não forem redefinidas ou dependerem de parâmetros externos (como variáveis ​​de ambiente), então, em algumas circunstâncias, você poderá observar resultados diferentes em máquinas diferentes.

Outras dicas

Todos os próprios hardware devem fazer da mesma maneira, assumindo que eles implementam operações de ponto flutuante do IEEE, e acho que mais?

http://en.wikipedia.org/wiki/ieee_754-2008

A maioria do hardware moderno é padronizado, assim como a definição de duplo. Você pode verificar se ambos estão usando o mesmo tipo verificando a pegada de memória de cada variável - por exemplo, tamanho de (x).

A também deve ser algumas informações para pesquisar no float.h.

Pelo que me lembro, o INT tende a ser mais problemático em termos de consistência. Alguns padrão para 2 bytes, outros a 4, mas você sempre pode usar longos para garantir tamanhos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top