尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

全用规格化数 vs IEEE 754:0 附近的精度与连续性之争

全用规格化数 vs IEEE 754:0 附近的精度与连续性之争 文章目录全用规格化数 vs IEEE 7540 附近的精度与连续性之争背景两种方案的具体表现核心差别同样的个数不同的覆盖范围-126 到 -127 区间的差别精度差在哪但代价是什么一句话总结全用规格化数 vs IEEE 7540 附近的精度与连续性之争背景IEEE 754 单精度浮点数中阶码全 0 被保留给非规格化数和 ±0。如果我们做一个思想实验——把阶码全 0 也当规格化数处理和实际的 IEEE 754 方案对比会发现在 0 附近存在显著的差别。两种方案的具体表现方案 A全用规格化数思想实验阶码全 0 也按规格化数处理隐含位为 1指数 0 - 127 -127公式1. M × 2 − 127 1.M \times 2^{-127}1.M×2−127覆盖范围[ 2 − 127 , 2 − 126 ) [2^{-127},\ 2^{-126})[2−127,2−126)个数2 23 2^{23}223个相邻间距2 − 150 2^{-150}2−150方案 BIEEE 754 实际方案阶码全 0 为非规格化数隐含位为 0指数固定为-126公式0. M × 2 − 126 0.M \times 2^{-126}0.M×2−126覆盖范围[ 0 , 2 − 126 ) [0,\ 2^{-126})[0,2−126)个数2 23 2^{23}223个相邻间距2 − 149 2^{-149}2−149可以表示真正的0 (当尾数也为0时)核心差别同样的个数不同的覆盖范围两个方案都有2 23 2^{23}223个数但覆盖的区间宽度不同对比项全用规格化数IEEE 754 实际方案公式1. M × 2 − 127 1.M \times 2^{-127}1.M×2−1270. M × 2 − 126 0.M \times 2^{-126}0.M×2−126覆盖范围[ 2 − 127 , 2 − 126 ) [2^{-127},\ 2^{-126})[2−127,2−126)[ 0 , 2 − 126 ) [0,\ 2^{-126})[0,2−126)区间宽度2 − 127 2^{-127}2−1272 − 126 2^{-126}2−126个数2 23 2^{23}2232 23 2^{23}223相邻间距2 − 150 2^{-150}2−1502 − 149 2^{-149}2−1490 附近空洞有0 到2 − 127 2^{-127}2−127全空无被非规格化数填满下溢行为断崖式归零渐进下溢能表示的最小正数2 − 127 2^{-127}2−1272 − 149 2^{-149}2−149-126 到 -127 区间的差别在[ 2 − 127 , 2 − 126 ) [2^{-127},\ 2^{-126})[2−127,2−126)这段区间里两个方案的表现截然不同全用规格化数间距2 − 150 2^{-150}2−1502 23 2^{23}223个数均匀铺满整个区间精度更高IEEE 754 非规格化数间距2 − 149 2^{-149}2−1492 22 2^{22}222个数均匀铺满整个区间精度更低另一半编码用在了[ 0 , 2 − 127 ) [0,\ 2^{-127})[0,2−127)上也就是说在 -126 到 -127 这段区间里全用规格化数的精度是 IEEE 754 的两倍——间距小一倍能表示的数多一倍。对比项全用规格化数IEEE 754 实际方案区间[ 2 − 127 , 2 − 126 ) [2^{-127}, 2^{-126})[2−127,2−126)内的数量2 23 2^{23}223个2 22 2^{22}222个少一半0 附近空洞有0 到2 − 127 2^{-127}2−127全空无被非规格化数填满下溢行为断崖式归零渐进下溢能表示的最小正数2 − 127 2^{-127}2−1272 − 149 2^{-149}2−149精度差在哪同样的2 23 2^{23}223个数全用规格化数只覆盖[ 2 − 127 , 2 − 126 ) [2^{-127},\ 2^{-126})[2−127,2−126)这段宽度为2 − 127 2^{-127}2−127的区间而非规格化数要覆盖[ 0 , 2 − 126 ) [0,\ 2^{-126})[0,2−126)这段宽度为2 − 126 2^{-126}2−126的区间——两倍宽。所以非规格化数的间距是2 − 149 2^{-149}2−149比全用规格化数的2 − 150 2^{-150}2−150大了一倍精度低了一倍。但代价是什么全用规格化数的代价是0 到2 − 127 2^{-127}2−127之间一个数都没有。任何比2 − 127 2^{-127}2−127更小的正数只能被舍入为 0。这就是突然下溢——精度在边界处断崖式崩塌。IEEE 754 用非规格化数填满了这个空洞虽然间距大了一倍精度低了一倍但换来了从 0 到最小规格化数之间的平滑过渡最小能表示到2 − 149 2^{-149}2−149。一句话总结同样的2 23 2^{23}223个数全用规格化数挤在[ 2 − 127 , 2 − 126 ) [2^{-127},\ 2^{-126})[2−127,2−126)里间距2 − 150 2^{-150}2−150精度高但 0 附近有断崖IEEE 754 把它们摊在[ 0 , 2 − 126 ) [0,\ 2^{-126})[0,2−126)上间距2 − 149 2^{-149}2−149精度低了一倍但换来了渐进下溢的连续性。在 -126 到 -127 这段区间里全用规格化数的精度是 IEEE 754 的两倍。这是一个精度 vs 连续性的经典取舍。
返回列表