c# - 十进制是四倍精度吗?
问题描述
浮点数是 32 位,是单精度(浮点格式)。Double 是 64 位,是双精度(浮点格式)。十进制是 128 位,但它是四倍精度(浮点格式)吗?
解决方案
不。
第一个重点是单、双、四等表示二进制浮点数。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
是为货币操作而设计的,所以这个范围是足够的(即使考虑到目前的货币通胀率很长一段时间也足够了)。
推荐阅读
- php - 改进识别和转换 Unicode 表情符号的功能
- tomcat - 将tomcat7迁移到tomcat9后找不到taglib
- c++ - 是否可以获取基本字符的枚举类的元素数量或核对值?
- node.js - 为什么我不能在 ios 设备上关闭并重新打开 react-native 调试?
- mysql - 如何从查询中选择最大值?
- php - 如何使用 PDO 准备语句在链接中使用 id 号从行中获取数据
- php - 向时事通讯的订阅者发送大量消息
- swiftui - 在两个视图之间传递数据
- c++ - Boost.Hana JSON 示例:string 和 decltype(std::to_string(...)) 之间的区别
- docker - 如何修复 docker OCI 运行时创建失败