zoukankan      html  css  js  c++  java
  • 20155216 第六周课上测试补交及教材练习完成

    20155216 第六周课上测试补交及教材练习完成

    第六周课上测试-3-ch02

    将程序正常运行结果如下:

    将程序使用断点调试后运行结果为:

    与运行结果的不同和联系:
    运行结果输出的是v和uv的十进制结果,断点调试过程输出的是十六进制结果。

    第六周课上测试-4-ch03

    经过删除的代码如图:(压栈和出栈处在图中以标出)

    教材P97 2.96

    int float_f2i(float_bits f);
    对于浮点数f,这个函数计算(int)f。如果f是NaN,你的函数应该向零舍入。如果f不能用整数表示(例如,超出表示范围,或者它是一个NaN),那么那么函数应该返回0x80000000。
    测试你的函数,对参数f可以取的所有2^32个值求值,将结果与你使用的机器的浮点运算得到的结果相比较。

    代码执行实现这些指定的浮点运算的位操作,用unsigned 类型模拟int去运算浮点数的转换,将一个float类型转换为整数,用unsigned实现一个float数转换为intt时的位级表示。

    #include <stdio.h>
    #include <limits.h>
    typedef unsigned float_bits;
    
    int float_f2i(float_bits f)
    {
        unsigned sign=f>>31;
        unsigned exp = (f>>23)&0xff;
        unsigned frac = f&0x7fffff;
    
        if(exp == 0)
            return 0;
        if(exp == 0xff)
            return 0x80000000;
        unsigned m = frac+0x800000;
        int e =exp-127;
        if(e<0)
            return 0;
        else if(e>31)
            return 0x80000000;
        else if(e<23)
            m>>(23-e);
        else
            m<<(e-23);
        return sign<<31|m;
    }
    
    int main()
    {
        int i;
        unsigned u;
        float f;
        for(u=INT_MIN;u<=INT_MAX;u++)
        {
            f=*((float*)&u);
            i=float_f2i(u);
            if((int)f == i)
                printf("%u ok
    ",u);
            else
            {
                printf("error");
                return -1;
            }
        }
    }
    
    

    测试0~10的结果为:

    教材P97 2.97

    float_bits float_i2f(int i);
    对于函数i,这个函数计算(float)i的位级表示。
    测试你的函数,对参数f可以取的所有2^32个值求值,将结果与你使用的机器的浮点运算得到的结果相比较。

    代码执行实现这些指定的浮点运算的位操作,用unsigned 类型模拟float去运算浮点数的转换,将一个int类型转换为浮点数,用unsigned实现一个int数转换为float时的位级表示。

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef unsigned float_bits;
    float_bits float_i2f(int i);
    
    int main()
    {
        int i;
        for(i=INT_MIN;i<=INT_MAX;i++)
        {
          float_i2f(i);
          printf("
    ");
        }
        return 0;
    }
    
    float_bits float_i2f(int i)
    {
       unsigned sign=0;
       unsigned exp=0;
       if(i<0)
        {
           i=-i;
           sign=1;
        }
    
       unsigned frac=i;
       i=i|(i>>1);
       i=i|(i>>2);
       i=i|(i>>4);
       i=i|(i>>8);
       i=i|(i>>16);
       i=i^(i>>1);
       frac=(frac-i);
       while(i>>=1)
        exp++;
       frac=(frac<<(23-exp)) & 0xFFFFFFFF;
       exp+=127;
       sign=sign & 1;
        exp=exp& 0xFF;
       printf("exp=%d	 frac=%d	 i=%d	",exp,frac,i);
        return(sign<<31)|(exp<<23)|frac;
    }
    
    

    测试0~10的结果为:

  • 相关阅读:
    windows下nginx以服务自启动
    redis数据库可视化工具(RedisDesktopManager)
    myecplise中的svn如何切换账号
    oracle创建视图包含clob字段,报错:数据类型不一致:应为-,但却获得CLOB
    java.lang.UnsatisfiedLinkError: no jacob-1.18-x64 in java.library.path
    java中关于日期的处理
    js截取字符串
    关于sql developer中表或视图不存在以及查找日志窗口
    在html页面切换标题栏目时出现页面抖动
    严重: IOException while loading persisted sessions: java.io.EOFException
  • 原文地址:https://www.cnblogs.com/LeeX1997/p/7748188.html
Copyright © 2011-2022 走看看