• CSAPP:第二章 2.4 练习题答案


    45

       

    小数值

    二进制表示

    十进制表示

    1/8

    0.001

    0.125

    3/4

    1/2+1/4 = 0.11

    0.75

    25/16

    (16+8+1)/16  = (11001b)/16 = 1.1001

    1.5625

    (101011b)/2^4 = 43/16

    10.1011

    2.6875

    (1001b)/2^3 = 9/8

    1.001

    1.125

    (5*8+7)/8=47/8

    101111b/8 = 101.111

    5.875

    (51/16)

    110011b/16 = 11.0011

    3.1875


    46

    A: 0.1 -x 的二进制表示

        0.1 = 0.0001100110011001100110011[0011]

          x = 0.0001100110011001100110000

    0.1 - x = 0.0000000000000000000000011[0011]...

    B: 0.1 - x的近似十进制值

    x = 0.0001100110011001100110000 

      = 00001100110011001100110000 / 2^25 

      = 110011001100110011 / 2^21 

      = 209715/2097152 

      = 0.0999999046325684

    0.1 - x = 0.0000000953674316 = 0.953674316 * 10^(-7)

    C: 100h = 360000s => count = 3600000

    count * x = (3600000*209715)/2097152 = 359999.6566772461s

    deta = 3600000 - 359999.6566772461 = 0.34332275390625s

    误差为 0.34332275390625s秒。

    D:  每秒误差 = (0.1-x) * 10 * 2000m/s= 0.953674316 * 10^(-6)s *2000m/s = 1.907348632 * 10^(-3)s  ~= 1.91毫米.

       


    47

    Bias = 2^(k-1) -1 = 2^1 - 1 = 1

       

    e

    E

    2^E

    f

    M

    2^E * M

    V

    十进制

    0 00 00

    0

    0

    1

    0

    0

    0

    0

    0

    0 00 01

    0

    0

    1

    1/4

    1/4

    1/4

    1/4

    0.25

    0 00 10

    0

    0

    1

    1/2

    1/2

    2/4

    1/2

    0.5

    0 00 11

    0

    0

    1

    3/4

    3/4

    3/4

    3/4

    0.75

    0 01 00

    1

    0

    1

    0

    1

    4/4

    1

    1

    0 01 01

    1

    0

    1

    1/4

    5/4

    5/4

    5/4

    1.25

    0 01 10

    1

    0

    1

    1/2

    3/2

    6/4

    3/2

    1.5

    0 01 11

    1

    0

    1

    3/4

    7/4

    7/4

    7/4

    1.75

    0 10 00

    2

    1

    2

    0

    1

    8/4

    2

    2

    0 10 01

    2

    1

    2

    1/4

    5/4

    10/4

    5/2

    2.5

    0 10 10

    2

    1

    2

    1/2

    3/2

    12/4

    3

    3

    0 10 11

    2

    1

    2

    3/4

    7/4

    14/4

    7/2

    3.5

    0 11 00

    -

    -

    -

    -

    -

    -

    正无穷

    -

    0 11 01

    -

    -

    -

    -

    -

    -

    NaN

    -

    0 11 10

    -

    -

    -

    -

    -

    -

    NaN

    -

    0 11 11

    -

    -

    -

    -

    -

    -

    NaN

    -

       

    48

    3510593 = 1101011001000101000001b

    3510593.0  = 0x4a564504 = 1001010010101100100010100000100 = 0 10010100 10101100100010100000100

    M = 1 .  10101100100010100000100

    e = 10010100 = 148

    E = 148 - 127 = 21

    所以小数点移动右移动21位, V = 1101011001000101000001.00 = 3510593.00 


    49

    A 这个正整数是 2^(n+2) + 1

    B 那就是2^25 + 1


    50

       

      

      

       

    数值

    舍入

    数值

    A

    10.010

    2.25

    10.0

    2

    B

    10.011

    2.375

    10.1

    2.5

    C

    10.110

    2.75

    11.0

    3

    D

    10.001

    2.125

    10.0

    2


    51

    x   = 0.00011001100110011001100

    0.1 = 0.00011001100110011001100 110011[0011]

    x'  = 0.00011001100110011001101

    x' - 0.1 = 00011001100110011001101 / 2^23 - 0.1

             = 838861/8388608 - 0.1 

                    = (838861 - 838860.8)/8388608 

                    = 2 / 8388608 

                    = 1 / 4194304

                    = 2.384185791015625e-7


    52

       

       

       

    011 0000

    1

    0111 000

    1

    101 1110

    7.5

    1001 111

    7.5

    010 1001

    0.78125

    0110 100

    0.75

    110 1111

    15.5

    1011 000

    16

    000 0001

    0.015625

    0001 000

    0.015625

       


    53

    #define HUGE_NUM (1.0e300)

    #define POS_INFINITY (HUGE_NUM*HUGE_NUM)

    #define NEG_INFINITY (-1*POS_INFINITY)

    #define NEG_ZERO (0)


    54

    A true,因为doublen52位,所以任何32位整数都可以精确的表示。

    B x = 0x7fffffff; 这个数字包含311,所以float没法精确标示。

    C d= 1.11111111111111111111111111111  1的个数超过23位就可以了。

    D true, 一样,double可以表示所有的float数字.

    E true, 浮点数的正数和负数的表示范围一样,不会出现溢出.

    F true

    G true 浮点数没有负溢出,正数乘法的结果永远是正数。

    H d = 18014398509481984; f = 2; 构造方法是找个大的数d, d+f无法精确表示,但是d-f能表示.

  • 相关阅读:
    支付宝支付
    七牛云存储介绍
    ubuntu开发机初始化
    Unity3D 正六边形,环状扩散,紧密分布,的程序
    Unity属性的封装、继承、方法隐藏
    DateTime.Now的一些用法
    [转] 增强现实 colAR Mix 浅析
    [转] Vuforia AR 中的阴影与浮现效果
    网址整理
    [转] 如何使用unity Vs来进行断点调试
  • 原文地址:https://www.cnblogs.com/aoaoblogs/p/2809351.html
Copyright © 2020-2023  润新知