小编Joh*_*old的帖子

.NET Math.Log10()在不同的计算机上表现不同

我发现跑步了

Math.Log10(double.Epsilon) 
Run Code Online (Sandbox Code Playgroud)

-324在机器A上返回,但将-Infinity在机器B上返回.

他们最初的表现方式与回归相同-324.

两台机器都使用相同的操作系统(WinXP SP3)和.NET版本(3.5 SP1).机器B上可能有Windows更新,但是不知道发生了什么变化.

什么可以解释行为上的差异?

评论中讨论的更多细节:

  • 机器A CPU是32位Intel Core Duo T2500 2 GHz
  • 机器B CPU是32位Intel P4 2.4 GHz
  • 从使用多个第三方组件的大型应用程序中运行的代码收集的结果.但是,两台计算机上都运行相同的.exe和组件版本.
  • 打印Math.Log10(double.Epsilon)在机器B上打印一个简单的控制台应用程序-324,而不是-Infinity
  • 两台机器上的FPU控制字始终0x9001F(读取_controlfp()).

更新:最后一点(FPU控制字)不再成立:使用较新版本的_controlfp()显示不同的控制字,这解释了不一致的行为.(有关详细信息,请参阅下面的rsbarro答案.)

.net c# math epsilon

32
推荐指数
2
解决办法
2139
查看次数

标签 统计

.net ×1

c# ×1

epsilon ×1

math ×1