如果我在Windows(x86和x64)下运行涉及System.Double
的复杂计算,然后运行Mono(Linux,Unix,无论如何),我绝对保证得到在所有情况下完全相同的结果,或者规范是否允许在计算中留有一些余地?
答案 0 :(得分:14)
来自MSDN
另外,精度损失 这是算术的结果, 赋值和解析操作 双值可能会有所不同 平台。例如,结果 分配文字Double值可以 32位和64位不同 .NET Framework的版本
希望有所帮助。
答案 1 :(得分:5)
不,不一样。它可能编译为x87或SSE指令,这些指令的工作方式不同(例如关于denorm支持)。我发现无法强制.net使用可重现的浮点数学。
有一些替代品,但所有这些都很慢,而且有些工作很多:
Log
和Sqrt
会很慢。如果你愿意,我可以为此挖出我未完成的代码。Decimal
在软件中实现,因此也可以重复,但它也不快。答案 2 :(得分:0)
我不相信。这样的短语:
内部浮点的大小 表示是依赖于实现的,可以变化,并且应该具有至少与之相同的精度 表示的变量或表达式
和
此设计允许CLI为其选择特定于平台的高性能表示 浮点数,直到它们被放置在存储位置。例如,它可能会离开 硬件寄存器中的浮点变量,提供比用户请求的更高的精度。在 同时,CIL生成器可以强制操作遵守特定于语言的表示规则 使用转换说明
从MS分区的第12.1.3节开始,我倾向于指出如果所有操作都在内部表示中发生,则可能会出现舍入差异