CSAPP

​ 向偶数舍入初看上去好像是个相当随意的目标——有什么理由偏向取偶数呢?为什么不始终把位于两个可表示的值中间的值都向上舍入呢?使用这种方法的一个问题就是很容易假想到这样的情景:这种方法舍入一组数值,会在计算这些值的的平均数中引入统计偏差。我们采用这种方法舍入一组数的平均值将比这些数本身旳平均值略高一些。相反,如果我们总是把两个可表示值中间的数字向下舍入,那么舍入出的一组数的平均值将比这些数本身的平均值略低一些。向偶数舍入在大多数现实情况中避免了这种统计偏差。在50%的时间里,它将向上舍入,而在50%的时间里,它将向下舍入。

如何向偶数舍入

要点

  • 只有在两个可表示的数中间的数才会进行偶数舍入
  • 其余情况为,舍入到靠近的那个可表示的数

十进制

舍入到小数点后两位

  • 1.2349999舍入为1.23 1.2350001舍入为1.24
  • 因为它们不是1.231.24的正中间

  • 1.2350000 舍入为1.24 1.2450000舍入为1.24
  • 因为前者处于1.231.24的正中间,后者处于1.241.25的正中间,且4为偶数

二进制

舍入到小数点后两位

两个二进制数的正中间

  1. 现在是舍入到小数点后两位,那么我们看从小数点后三位开始的数字,就叫它多余数字
  2. 多余数字正好为100000000...时,它的大小是正好是上一位为1所代表的数的一半,也就是说,在正中间
  3. 多余数字第一位为0,比如01001001000...,它小于中间值,所以向下舍入
  4. 多余数字第一位为1,且其他位还有1,比如10000010001...,它大于中间值,所以向上舍入

二进制小数的偶数

我们将最低有效位的值为0认为是偶数,1认为是奇数

  • 10.00011舍入为10.00 10.00110舍入为10.01
  • 因为它们不是10.0010.01的中间值

  • 10.11100舍入为11.00 10.10100舍入为10.10
  • 它们的多余数字均为中间值,所以进行向偶数舍入
  • 前者最低有效位为1,则进1,使之为0
  • 后者最低有效位为0,则舍去多余数字即可
舍入前 1.01011 1.01100 1.01101 1.01110 1.01111 1.10000 ... 1.10100
舍入后 1.01000 1.10000 1.10000 1.10000 1.10000 1.10000 ... 1.10000
状态 向下 向偶数 向上 向上 向上 向下 ... 向偶数

IEEE浮点数向偶数舍的更多相关文章

  1. IEEE浮点数标准

    IEEE浮点数标准 阅读笔记:Computer System : A Programmmer's Perspective 基本概念 IEEE浮点数标准采用 \[V=(-1)^s\times M\tim ...

  2. IEEE浮点数float、double的存储结构

    众所周知,C的float.VB的Single都是32位浮点数变量类型(也叫单精度浮点数),C的double和VB的Double则都是64位的浮点数变量类型(也叫双精度浮点数).有些编译器还支持更屌的l ...

  3. 浮点数向偶数舍入的问题 Round-to-Even for Floating Point

    Round-To-Even在于To-Up , To-Down, To-towards-Zero对比中,在一定数据量基础上,更加精准.To-Up的平均值比真实数值偏大,To-Down偏小.   例如有效 ...

  4. IEEE浮点数表示法之出小数

    纯小数的表示方法-------------------------------------------------    下面再来讲如何将纯小数转化为十六进制.对于纯小数,比如0.0456,我们需要把 ...

  5. 浮点数在计算机中的表示(IEEE浮点数标准)

    转载自:https://wdxtub.com/2016/04/16/thin-csapp-1/

  6. 【转】浮点数与IEEE 754

    http://www.cnblogs.com/kingwolfofsky/archive/2011/07/21/2112299.html 浮点数 1.   什么是浮点数 在计算机系统的发展过程中,曾经 ...

  7. IEEE 754 浮点数的四种舍入方式

    四种舍入方向: 向最接近的可表示的值:当有两个最接近的可表示的值时首选"偶数"值:向负无穷大(向下):向正无穷大(向上)以及向0(截断). 说明:默认模式是最近舍入(Round t ...

  8. IEEE二进制浮点数算术标准(IEEE 754)

    整理自IEEE 754 IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用.这个标准定义了表示浮点数的格式(包括负零-0) ...

  9. IEEE 754二进制浮点数算术标准

    可能很多人都遇到过浮点数精度丢失的问题,下面以JavaScript为例. 1 - 0.9 = 0.09999999999999998 纳尼,不应该是0.1么,怎么变成0.099999999999999 ...

随机推荐

  1. Nacos 的安装与服务的注册

    Nacos 的安装与服务的注册 我们都知道naocs是一个注册中心,那么注册中心是什么呢? 什么是注册中心? 它类似与一个中介角色(不收费的良心中介), 在微服务中起纽带的作用,它提供了服务和服务地址 ...

  2. Zend Studio,php 生成报错

    Zend Studio  Description Resource Path Location Type Undefined CSS file ("../red-treeview.css&q ...

  3. Linux修改CST时间为UTC时间。

    1.编辑配置文件添加如下内容 [root@Centos8-template ~]# vim /etc/sysconfig/clock ZONE="Etc/UTC" 2.生成链接 [ ...

  4. 云表平台VS永中office,谁更胜一筹?

    20年前,永中软件在国外办公软件独霸江山以及盗版软件肆意横行的夹缝中呱呱坠地. 经过永中人日日夜夜的不懈奋斗,永中Office V1.0面世. 永中科技 从创立之初永中软件便预见了独立创新.自主可控的 ...

  5. ActiveMQ、RabbitMQ、RocketMQ、Kafka四种消息中间件分析介绍

    ActiveMQ.RabbitMQ.RocketMQ.Kafka四种消息中间件分析介绍 我们从四种消息中间件的介绍到基本使用,以及高可用,消息重复性,消息丢失,消息顺序性能方面进行分析介绍! 一.消息 ...

  6. 如何让 JS 代码不可断点

    绕过断点 调试 JS 代码时,单步执行(F11)可跟踪所有操作.例如这段代码,每次调用 alert 时都会被断住: debugger alert(11) alert(22) alert(33) ale ...

  7. linux 磁盘io利用率高,分析的正确姿势

    一.背景简介 作为一个DBA难免不了会遇到性能问题,那么我们遇到性能问题该如何进行排查呢?例如我们在高并发的业务下,出现业务响应慢,处理时间长我们又该如何入手进行排查,本片文章将分析io高的情况下如何 ...

  8. ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程

      通过Rider调试的方式看了下ASP.NET Core 5.0的Web API默认项目,重点关注Host.CreateDefaultBuilder(args)中的执行过程,主要包括主机配置.应用程 ...

  9. Docker 01 概述

    参考源 https://www.bilibili.com/video/BV1og4y1q7M4?spm_id_from=333.999.0.0 https://www.bilibili.com/vid ...

  10. 【Go实战基础】创建并完成第一个可执行的 go 程序

    实战需求:创建并完成第一个可执行的 go 程序.项目目录:go-001具体实战步骤如下: 一.进入工程目录 cd go-001/ 二. 创建 g001.go 文件 /* * @Author: 菜鸟实战 ...