.NET Decimal算术实现精确规范咨询及运算差异解析
.NET Decimal类型运算行为疑问
运算示例
原始数值:
0.0000000000000000000000000001
它的(lo mid hi flags)内部表示形式:
1 0 0 1c0000
执行除以10操作后,结果的(lo mid hi flags)为:
0 0 0 0
执行乘以0.1M操作后,结果的(lo mid hi flags)为:
0 0 0 1c0000
简言之,Decimal运算中:
0.0000000000000000000000000001 * 0.1M的结果为0.00000000000000000000000000000.0000000000000000000000000001 / 10M的结果为0
演示代码
var o = 0.0000000000000000000000000001M; Console.WriteLine($"{o * 0.1M}"); Console.WriteLine($"{o / 10M}");
问题需求
我需要在虚拟机中复现Decimal的此类运算行为及所有其他算术逻辑,但查看System.Decimal.cs未找到有效信息,希望获得相关规范说明或原理解释。
更新补充
这似乎是Decimal乘法实现中的bug。根据IEEE 754 2008标准,运算符应保留小数位数(scale),但乘法运算未遵守这一规则。
内容的提问来源于stack exchange,提问作者Frank
相关产品推荐
相关产品推荐

