首页 > 解决方案 > 十进制是四倍精度吗?

问题描述

浮点数是 32 位,是单精度(浮点格式)。Double 是 64 位,是双精度(浮点格式)。十进制是 128 位,但它是四倍精度(浮点格式)吗?

标签: c#

解决方案


不。

第一个重点是单、双、四等表示二进制浮点数。decimal是十进制浮点数,因此不符合 IEEE-754 类别。

那么,标准是怎么说的呢?

对于 binary128(“四倍精度”),您有一个 113 位有效数和一个 15 位指数。这可以计算为 34 位十进制数字,指数介于 -16 382 和 +16 383 之间。请注意,指数在两个之上(例如,最大值为 2 ^ 16 383),因此是二进制的。

decimal128 是等效的十进制浮点数,有效数为 110 位,指数为 12 位。但是,指数在 10 之上,因此 decimal128 的范围远大于 binary128(binary128 为 ~1E4932,decimal128 为 ~1E6145)。

decimal与标准相比如何?

28 位有效数字,范围从正数 79,228,162,514,264,337,593,543,950,335 到负数 79,228,162,514,264,337,593,543,950,335。

所以不,它不是四倍精度,因为它是十进制浮点数,但是即使您与 IEEE-754 标准中相同级别的十进制浮点数进行比较,范围甚至都不会接近,尽管有效位数很接近足够的。decimal是为货币操作而设计的,所以这个范围是足够的(即使考虑到目前的货币通胀率很长一段时间也足够了)。


推荐阅读