精华内容
下载资源
问答
  • 行业资料-交通装置-一种汽车尾箱感应自系统.zip
  • 一种新能源混合动力汽车台架排系统停控制设计.pdf
  • 书院体是由义字库出品的艺术字体,这款字体在笔画上保留深化了隶书波折的元素,弱化了蚕头雁的修饰,章法左右波折遥相呼应,书卷气息浓厚。适合应用于艺术设计、平面宣传设计、网页设计,书法字帖等领域,...
  • 狮子座字体,狮子座是天生的王者,有很强的领导能力,同时还有博爱、热心、慷慨等优点,义字库为小狮子们专门设计了这个狮子座字体,字体比较随意,圆滑,同时加入了皇冠、狮子头、喊话、狮子尾巴、星星等元素...
  • 有合同的,而且交付后拒不付款,开始说付,然后是拖着不付,说自己的款没有收到,最后一分都不付,目前网站上就是用我们的设计,拿来就可以用,这就是不付款的代价,现在就拿来分享给大家用吧,拿来就可以用的,切...
  • 前言 解释一些概念: CRLF:回车换行。CR:即平常说的\r,回车;LF:即\n,换行。 windows下换行符为CRLF,unix系统(如linux,现在的mac等...以我个人机器的默认git客户端配置来说,在检出和检入时,行换行符会做

    前言

    解释一些概念:

    CRLF:回车换行。CR:即平常说的\r,回车;LF:即\n,换行。

    windows下换行符为CRLF,unix系统(如linux,现在的mac等)用LF。

    git服务器,一般是在linux上部署。

    git客户端,即我们的开发环境,个人工作环境,集成部署发布环境等,可能是windows、mac、linux等。

    本文以git客户端在windows下环境说明,在unix环境就不太可能遇到我说的这个问题了。

    以我个人机器的默认git客户端配置来说,在检出和检入时,行尾换行符会做相关转换。如:我在windows下写的代码,提交仓库时,行尾的换行符CRLF会转换为LF(官方术语:normalization,标准化),这个时间点我测试是在提交代码到本地仓库的时候,不是推送远程。当从远程拉取代码到本地的时候,行尾换行符会转换(官方术语:conversion,转换),从LF到CRLF,因为我是windows环境,这个是自动识别转换了。

    接下来说个业务场景,抛砖引玉。

    业务背景

    我在windows下写了个应用启停的shell脚本,提交到git仓库。测试人员会拉取代码,将项目打包部署到测试环境然后使用这个脚本启动。

    问题:在windows下换行符是CRLF,提交仓库时转换为LF。但测试人员用的也是windows,git默认配置,拉下来转换为CRLF。将这个脚本上传到服务器执行就会出问题,格式不正确,报错类似结束符不正确:\r之类的。

    用vim -b打开,看到报错的行尾有个^M之类的符号等。

    比较low的方法就是用个转换工具(抱歉,名字突然忘了,建议上网搜一下),将windows格式转换为unix格式,或者vim打开的时候在编辑模式输入:set fileformat=unix回车保存退出即可。

    现在,期望的是,不要发生这种转换,测试人员下载下来的时候换行符就是LF,上传到linux执行没有问题。

    解决办法

    我最开始遇到这类问题,在网上搜过,也了解了下面这个配置:算是自动转换的开关配置。其实对这个场景用处不大,因为,我只需要对其中的几个文件进行处理,并且这个配置只作用于我的客户端,不能让所有协同开发人员都要关心这个配置问题。

    git config --global core.autocrlf  [true | input | false] 

    一个很理想的解决办法:

    在工程的目录下,建立一个文件,文件名:.gitattributes,和.gitignore很像。

    内容如下:检入进行标准化转换为LF,但检出不转换。

    *.sh     eol=lf

    .gitattributes,是定义每个路径的属性配置文件,有很多属性,说明:http://schacon.github.io/git/gitattributes.html

    上面链接文档,说的很清楚,没必要重复对这个配置进行更多解释,内容也不少,有需要查一下。

    说下这个问题:

    关于行尾结束符这里,有两个属性参数可以选择设置,每个属性也有几个不同的值。上面的配置:*.sh eol=lf,就是指当前目录下所有sh结尾的文件,设置属性eol,它的值是lf:检入时标准化为LF,检出时阻止转换为CRLF.

    eol

    This attribute sets a specific line-ending style to be used in the working directory. It enables end-of-line normalization without any content checks, effectively setting the text attribute.

    Set to string value "crlf"

    This setting forces git to normalize line endings for this file on checkin and convert them to CRLF when the file is checked out.

    Set to string value "lf"

    This setting forces git to normalize line endings to LF on checkin and prevents conversion to CRLF when the file is checked out.

    这样就解决问题了。

    其它属性说明或示例等看上面的链接自查即可。

    最后,说下.gitattributes文件位置,不一定必须在工程根目录下,另外该设置项也有优先级(如,全局范围、系统范围、该配置文件距离作用文件的路径距离等都有影响)。

    本文仅是作为一个场景示例说明和解决办法。如遇类似问题,可参考相关属性设置或配置项灵活解决。

     

    展开全文
  • 本工程的闸门及闭设备布置在进水口及水部位,金属结构安装总工程量约为6886t,其中闸门、栏污栅埋件48套,门叶(含栅体)41套,门机2台,天车1台,液压闭机5台(其中液压泵站2台)。
  • 设置redis开机自 1.设置redis.conf中daemonize为yes,确保守护进程开启 2.vi /etc/init.d/redis #!/bin/bash # chkconfig:2345 90 10 # description:Redis is a persistent key-value database PATH=/usr/local/...

    设置redis开机自启

    1.设置redis.conf中daemonize为yes,确保守护进程开启
    2.vi /etc/init.d/redis

    #!/bin/bash
    # chkconfig:2345 90 10
    # description:Redis is a persistent key-value database
    PATH=/usr/local/redis
    REDISPORT=6300
    EXEC=${PATH}/bin/redis-server
    REDIS_CLI=${PATH}/bin/redis-cli
    PIDFILE=/var/run/redis.pid
    CONF="${PATH}/etc/redis.conf"
    case "$1" in
    start)
    if [ -f $PIDFILE ]
    then
    echo "$PIDFILE exists, process is already running or crashed."
    else
    echo "Starting Redis server..."
    $EXEC $CONF &
    fi
    if [ "$?"="0" ]
    then
    echo "Redis is running..."
    fi
    ;;
    stop)
    if [ ! -f $PIDFILE ]
    then
    echo "$PIDFILE exists, process is not running."
    else
    PID=$(cat $PIDFILE)
    echo "Stopping..."
    $REDIS_CLI -p $REDISPORT SHUTDOWN
    sleep 2
    while [ -x $PIDFILE ]
    do
    echo "Waiting for Redis to shutdown..."
    sleep 1
    done
    echo "Redis stopped"
    fi
    ;;
    restart|force-reload)
    ${0} stop
    ${0} start
    ;;
    *)
    echo "Usage: /etc/init.d/redis {start|stop|restart|force-reload}" >&2
    exit 1
    esac
    
    1. 授予权限
      chmod 777 redis
      4.启动
      /etc/init.d/redis start
      出现Starting Redis server…
      Redis is running…
      就是启动成功
      5.设置开机自启动
      chkconfig redis on
      6.关机重启测试
      reboot
      注意:
      linux 编码不同
      查看脚本文件是dos格式还是unix格式
      1.查看 cat -A filename 从显示结果可以判断,dos格式的文件行尾为^M , u n i x 格 式 的 文 件 行 尾 为 ,unix格式的文件行尾为 unix
    cat -A redis
    

    在这里插入图片描述
    转换编码
    使用linux命令dos2unix filename,直接把文件转换为unix格式

    dos2unix redis
    
    展开全文
  • ################start_tt.sh####################### #! /bin/sh #获取tt的状态, # 若为standby,则call ttrepstateset('ACTIVE'),exit 0,表示正常 ...# 若为active,exit 0,表示正常 ...# 若未idle,exit 1,...

    ################start_tt.sh#######################

    #! /bin/sh

    #获取tt的状态,
    #  若为standby,则call ttrepstateset('ACTIVE'),exit 0,表示正常
    #  若为active,exit 0,表示正常
    #  若未idle,exit 1,表示异常,res启动失败,切换res至对端节点
    # mod by jzh at June 18,2012


    FLAG_DIR="/etc/hacmp"
    TT_HOME="/tt/TimesTen/tt60"
    TT_USER="tt"
    TT_DSNAME="ocs"


    #check tt(daemon & ram) status
    tt_status=0
    tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`


    if [ $tt_status -eq 0 ];then   #tt status abnormal
     #check and start daemon 
      ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l`
      if [ $ds_status -eq 1 ];then  #daemon Abnormal
         su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -start 2>&1"   #start daemon
      fi;   
    fi;




     #check and start ram 
      ds_status=1 
      ram_status=0
      ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l` 
      ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`
      
      if [ $ds_status -eq 0 ] && [ $ram_status -eq 0 ];then
         su $TT_USER -c "$TT_HOME/bin/ttadmin -rampolicy always $TT_DSNAME 2>&1"   #ram load
      fi;
     
     #check and start rep 
      ram_status=0
      rep_status=0
      ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`
      rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`
      
      if [ $ram_status -eq 1 ] && [ $rep_status -eq 0 ];then  
         su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"   #rep start
      fi;
     
     #check cserver
      if [ `ps -ef|grep 'ttcserver -verbose' |grep -v 'grep'|wc -l` -eq 0 ];then
        su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -startserver 2>&1"  #start cserver
      fi;
      
    tt_status=0
    rep_status=0
    tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`
    rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`


    if [ $tt_status -eq 1 ] && [ $rep_status -eq 1 ];then #All status normal
      #check rep state
      rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`
      
      if [ -f "$FLAG_DIR/tt_rep_state.lock" ] && [ $rep_state = 'IDLE' ];then
        
        bef_rep_state=`cat $FLAG_DIR/tt_rep_state.lock|cut -d ',' -f 2`
        cat /dev/null > $FLAG_DIR/tt_rep_state.lock
        if [ $bef_rep_state = 'ACTIVE' ];then
          su $TT_USER -c "echo 'call ttrepstateset( \047active\047 );'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"
        fi;
      fi;


      rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`
      
      if [ $rep_state = 'ACTIVE' ];then
         exit 0;
      elif [ $rep_state = 'STANDBY' ];then
         su $TT_USER -c "echo 'call ttrepstateset( \047active\047 );'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1";
         exit 0;
      elif [ $rep_state = 'IDLE' ];then
         exit 1;
      fi;
    else 
      exit 1;  #abnormal-exit 

    fi;


    ################stop_tt.sh#######################

    #! /bin/sh
      #停止应用、断开连接   
      #执行,超时后强制切换
      #call ttreppolicy('manual');call ttrepstop;
      #call ttrepdeactivate; 
      #call ttrepolicy('always')


    FLAG_DIR="/etc/hacmp"
    TT_HOME="/tt/TimesTen/tt60"
    TT_USER="tt"
    TT_DSNAME="ocs"


    TT_REP_WAIT=60 ##seconds


    rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`


    if [ $rep_state = 'ACTIVE' ];then 


      kill -9 `su $TT_USER -c "echo 'call ttDataStoreStatus;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1|grep 'application'|cut -d ',' -f 2"`
      
      su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -stopserver 2>&1"   #stop cserver daemon
      
      
      while [ $TT_REP_WAIT -gt 0 ]
      do
        if [ `su $TT_USER -c "echo 'call ttrepsubscriberwait(,,,,5);'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep '< 00 >'|wc -l` -eq 1 ];then
            
          su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy manual $TT_DSNAME 2>&1" 
          su $TT_USER -c "echo 'call ttrepstop;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"
          su $TT_USER -c "echo 'call ttrepdeactivate;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1" 
          su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"
          echo `/usr/bin/date '+%Y%m%d'`','$rep_state >>  $FLAG_DIR/tt_rep_state.lock 
          TT_REP_WAIT=-100
        
        else
      
          TT_REP_WAIT=$(expr $TT_REP_WAIT - 5);
      
        fi;
      
      done;
      
      if [ $TT_REP_WAIT -eq -100 ];then
        exit 0;
      else
        exit 1;
      fi;
      
    fi;       

    ################start_tt_rep.sh#######################

    #! /bin/sh
    #获取tt的状态,
    #  若为standby,则call ttrepstateset('ACTIVE'),exit 0,表示正常
    #  若为active,exit 0,表示正常
    #  若未idle,exit 1,表示异常,res启动失败,切换res至对端节点


    FLAG_DIR="/etc/hacmp"
    TT_HOME="/tt/TimesTen/tt70"
    TT_USER="tt"
    TT_DSNAME="ocs"


    #check tt(daemon & ram) status
    tt_status=0
    tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`


    if [ $tt_status -eq 0 ];then   #tt status abnormal
     #check and start daemon
      
      ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l`
      if [ $ds_status -eq 1 ];then  #daemon Abnormal
         su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -start 2>&1"   #start daemon
      fi;   
     
     #check and start ram 
      ds_status=1 
      ram_status=0
      ds_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus 2>&1" |grep "Could not connect to the TimesTen daemon"|wc -l` 
      ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`
      if [ $ds_status -eq 0 ] && [ $ram_status -eq 0 ];then
         su $TT_USER -c "$TT_HOME/bin/ttadmin -rampolicy always $TT_DSNAME 2>&1"   #ram load
      fi;
     
     #check and start rep 
      ram_status=0
      rep_status=0
      ram_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`
      rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`
      
      if [ $ram_status -eq 1 ] && [ $rep_status -eq 0 ];then  
         su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"   #rep start
      fi;
    fi;


    tt_status=0
    rep_status=0
    tt_status=`su $TT_USER -c "echo 'select 1+1 from dual;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "< 2 >"|wc -l`
    rep_status=`su $TT_USER -c "$TT_HOME/bin/ttstatus" |grep "Replication agent is running"|wc -l`


    if [ $tt_status -eq 1 ] && [ $rep_status -eq 1 ];then #All status normal
      #check rep state
      rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`
      
      if [ -f "$FLAG_DIR/tt_rep_state.lock" ] && [ $rep_state = 'IDLE' ];then
        
        bef_rep_state=`cat $FLAG_DIR/tt_rep_state.lock|cut -d ',' -f 2`
        cat /dev/null > $FLAG_DIR/tt_rep_state.lock;
        su $TT_USER -c "echo 'call ttrepstateset(\'$bef_rep_state\');'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"; 
      fi;


      rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`
      
      if [ $rep_state = 'ACTIVE' ];then
         exit 0;
      elif [ $rep_state = 'STANDBY' ];then
         su $TT_USER -c "echo 'call ttrepstateset(\'ACTIVE\');'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1";
         exit 0;
      elif [ $rep_state = 'IDLE' ];then
         exit 1;
      fi;
    else 
      exit 1;  #abnormal-exit 
    fi;

    ################stop_tt_rep.sh#######################

    #! /bin/sh
      #停止应用、断开连接   
      #执行,超时后强制切换
      #call ttreppolicy('manual');call ttrepstop;
      #call ttrepdeactivate; 
      #call ttrepolicy('always')


    FLAG_DIR="/etc/hacmp"
    TT_HOME="/tt/TimesTen/tt70"
    TT_USER="tt"
    TT_DSNAME="ocs"


    rep_state=`su $TT_USER -c "echo 'call ttrepstateget;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"|grep "^<"|awk '{print $2}'`


    su $TT_USER -c "$TT_HOME/bin/ttdaemonadmin -stopserver 2>&1"   #stop cserver daemon
    su $TT_USER -c "echo 'call ttrepsubscriberwait(,,,,-1);'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"
    su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy manual $TT_DSNAME 2>&1" 
    su $TT_USER -c "echo 'call ttrepstop;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1"
    su $TT_USER -c "echo 'call ttrepdeactivate;'|$TT_HOME/bin/ttisql $TT_DSNAME 2>&1" 
    su $TT_USER -c "$TT_HOME/bin/ttadmin -reppolicy always $TT_DSNAME 2>&1"


    echo `/usr/bin/date '+%Y%m%d'`','$rep_state >>  $FLAG_DIR/tt_rep_state.lock


    展开全文
  • 计算机组成原理

    千次阅读 2021-07-18 05:19:47
    如r=16的浮点数,因其规格化数的尾数最高三位可能出现零,故与其舞位数相同的r=2的浮点数相比,后者可能比俞者多三位精度。 三、定点数和浮点数的比较 定点数和浮点数可从如下几个方面进行比较: (1)当浮点机和...

    第二节 数的定点表示和浮点表示

    在计算机中,小数点不用专门的器件表示,而是按约定的方式标出。共有两种方法来表示小数点的存在,即定点表示和浮点表示。定点表示的数称为定点数,浮点表示的数称为浮点数。

    一、定点表示

    小数点固定在某一位置的数为定点数,有以下两种格式。

    14549d7552500b9742dd00fed7d8a943.png

    当小数点位于数符和第一数值位之间时,机器内的数为纯小数;当小数点位于数值位之后时,机器内的数为纯整数。采用定点数的机器叫做定点机。数值部分的位数n决定了定点机中数的表示范围。若机器数采用原码,小数定点机中数的表示范围是-(1-2-n)~(1-2-n),整数定点机中数的表示范围是-(2n-1)~(2n-1)。

    在定点机中,由于小数点的位置固定不变,故当机器处理的数不是纯小数或纯整数时,必须乘上一个比例因子,否则会产生“溢出”。

    二、浮点表示

    实际上计算机中处理的数不一定是纯小数或纯整数(如圆周率3.1416),而且有些数据的数值范围相差很大(电子的质量9×10-28克,太阳的质量2×1033克),它们都不能直接用定点小数或定点整数表示,但均可用浮点数表示。浮点数即小数点的位置可以浮动的数,如

    352.47=3.5247×102

    =3524.7×10-1

    =0.35247×103

    显然,这里小数点的位置是变化的,但因为分别乘上了不同的10的方幂,故值不变。

    通常,浮点数被表示成

    N=S×rj

    式中S为尾数(可正可负),j为阶码(可正可负),r是基数(或基值)。在计算机中,基数可取2、4、8或16等。

    以基数r=2为例,数N可写成下列不同形式:

    N=11.0101

    =0.110101×210

    =1.10101×21

    =1101.01×2-10

    =0.00110101×2100

    为了提高数据精度以及便于浮点数的比较,在计算机中规定浮点数的尾数用纯小数形式,故上例中0.110101×210和0.00110101×2100形式是可以采用的。此外,将尾数最高位为1的浮点数称作规格化数,即0.110101×210为浮点数的规格化形式。浮点数表示成规格化形式后,其精度最高。

    1.浮点数的表示形式

    浮点数在机器中的形式如下所示。采用这种数据格式的机器叫做浮点机。

    b25c7b5b93816248bbc55d2b7f7a7096.png

    可见浮点数由阶码j和尾数S两部分组成。阶码是整数,阶符和阶码的位数m合起来反映浮点数的表示范围及小数点的实际位置;尾数是小数,其位数n反映了浮点数的精度;尾数的符号Sf代表浮点数的正负。

    2.浮点数的表示范围

    以通式N= S×rj为例,设浮点数阶码的数值位取m位,尾数的数值位取n位,当浮点数为非规格化数时,它在数轴上的表示范围如下所示。

    99b0d6523927b0f54a5b8d7387b16d12.png

    由图可见,其最大正数为0089aa48ba692f3e1816eac84f137cc4.gif

    ;最小正数为80730cdae9982169cdb96e50438677bd.gif

    ;最大负数为7165939effa544260a17315bcaf887d0.gif

    ;最小负数为f58fc8114e084360515d6f46a8e4208a.gif

    。当浮点数阶码大于最大阶码时,称为“上溢”,此时机器停止运算,进行中断溢出处理;当浮点数阶码小于最小阶码时,称为“下溢”,此时“溢出”的数绝对值很小,通常将尾数各位强置为零,按机器零处理,此时机器可以继续运行。

    一旦浮点数的位数确定后,合理分配阶码和尾数的位数,直接影响浮点数的表示范围和精度。通常对于短实数(总位数为32位),阶码取8位(含阶符1位),尾数取24位(含数符1位);对于长实数(总位数为64位),阶码取11位(含阶符1位),尾数取53位(含数符1位);对于临时实数(总位数为80),阶码取15位(含阶符1位),尾数取65位(含数符1位)。

    3.浮点数的规格化

    为了提高浮点数的精度,其尾数必须为规格化数。如果不是规格化数,就要通过修改阶码并同时左右移尾数的办法,使其变成规格化数。将非规格化数转换成规格化数的过程叫做规格化。对于基数不同的浮点数,因其规格化数的形式不同,规格化过程也不同。

      当基数为2时,尾数最高位为1的数为规格化数。规格化时,尾数左移一位,阶码减1,(这种规格化叫做向左规格化,简称左规);尾数右移一位,阶码加1(这种规格化叫做向右规格化,简称右规)。浮点数规格化后,其最大正数为7bdac85dcabfe6e9d484c1d5b2f751fd.gif

    ;最小正数为3f7e60572d80b90c07e27f5abd9fc94a.gif

    ;最大负数为477c4edd4783d4db58f2e9a3d7bd6fa5.gif

    ;最小负数为876fff220bb38cba16e075bb1acfd481.gif

    当基数为4时,尾数的最高两位不全为零的数为规格化数。规格化时,尾数左移两位,阶码减1;尾数右移两位,阶码加1。

    当基数为8时,尾数的最高三位不全为零的数为规格化数。规格化时,尾数左移三位,阶码减1;尾数右移三位,阶码加1。

    同理类推,不难得到基数为16或2n时的规格化过程。

    浮点机中一旦基数确定启就不再变了,而且基数是隐含的,故不同基数的浮点数其表示形式完全相同。但基数不同,对数的表示范围和精度等都受影响。一般来说,基数r越大,可表示的浮点数范围越宽,而且所表示的数其个数越多。但r越大,浮点数的精度反而下降。如r=16的浮点数,因其规格化数的尾数最高三位可能出现零,故与其尾舞位数相同的r=2的浮点数相比,后者可能比俞者多三位精度。

    三、定点数和浮点数的比较

    定点数和浮点数可从如下几个方面进行比较:

    (1)当浮点机和定点机中的数其位数相同时,浮点数的表示范围比定点数大得多。

    (2)当浮点数为规格化数财,其精度远比定点数高。

    (3)浮点数运算要分阶码部分和尾数部分,而且运算结果都要求规格化,故浮点运算步骤比定点运算步骤多,运算速度比定点低,运算线路比定点复杂。

    (4)在溢出的判断方法上,浮点数是对规格化数的阶码进行判断,而定点数是对数值本身进行判断。如小数定点机中的数其绝对值必须小于1,否则即“溢出”,此时要求机器停止运算,进行处理。为了防止溢出,上机前必须选择比例因子,这个工作比较麻烦,给编程带来不便。而浮点数的表示范围远比定点数大,仅当“上溢”时机器才停止运算,故一般不必考虑比例因子的选择。

    总之,浮点数在数的表示范围、数的精度、溢出处理和程序编程方面(不取比例因子)均优于定点数。但在运算规则、运算速度及硬件成本方面又不如定点数。因此,究竟选用定点数还是浮点数,应根据具体应用综合考虑。一般来说,通用的大型计算机大多采用浮点数,或同时采用定、浮点数;小型、微型及某些专用机、控制机则大多采用定点数。当需要作浮点运算时,可通过软件实现,也可外加浮点扩展硬件(如协处理器)来实现。

    四、举例

    例:将十进制数+13/128写成二进制定点数和浮点数(数值部分取10位,阶码部分取4位,阶符和数符各取1位),分别写出它在定点机和浮点机中的机器数形式。

    解:令x=+13/128

    其二进制形式:x=0.0001101000

    定点数形式:x=0.0001101000

    浮点数规格化表示:x=0.1101000000×2-11

    定点机中 [x]原=[x]补=[x]反=0.0001101000

    浮点机中 [x]原:1,0011;0.1101000000

    [x]补:1,1101;0.1101000000

    五、IEEE754标准

    在IEE754浮点数标准中,定义的浮点数的格式如下表所示。其中浮点数编码有32位、64位和80位三种格式,分别称为短实数、长实数和临时实数,短实数和长实数又分别称为单精度数和双精度数。

    浮点数

    符号位

    阶码

    尾数

    总位数

    短实数

    长实数

    临时实数

    1

    1

    1

    8

    11

    25

    23

    52

    64

    32

    64

    80

    在IEE754浮点数标准中,符号位s仍然用0表示正数,用1表示负数。正常数的阶码取值e的范围为1~254,尾数部分可以取任意的二进制数值f。这样,单精度数所表示的数值为:

    5606a9baa82f753d9faab995e8bcba26.gif

    从中我们可以发现,IEEE 754标准将一般规格化数中位于小数点后的1移到了小数点前,而且不需要用编码表示,只是在数值转换时在公式中加上这个1。另外,阶码代表的值需要减去127,而不是128,这也与一般移码略有不同。IEEE

    754双精度数的阶码取值范围为1~2046,代码所表示的数值为:

    73208511a1ca579642fe482d9fccea04.gif

    例:将十进制数-0.75表示成单精度的IEEE 754标准代码。

    解:-0.75可表示成-3/4。即二进制的-0.11。在浮点表示法中为

    -0.11×20

    在IEEE 754标准中规格化数的表示法为

    -1.1×2-1

    根据IEE754的单精度表示公式

    433e744839c130177d4907452832ffe6.gif

    这个数可表示为

    (-1)1×(1+0.1000 0000 0000 0000 0000 000)×2-1

    =(-1)1×(1+0.1000 0000 0000 0000 0000 000)×2126-127

    l 01111110 10000000000000000000000

    例:将如下IEEE 754单精度浮点数用十进制数表示:

    1 1000000l 010000000000000000000000

    解:符号位s=1,阶码部分值e=129,尾数部分f=1/4=0.25,根据IEEE754标准的表示公式

    (-1)1×(1+0.25)×2129-127

    =-l×1.25×22

    =-1.25×4

    =-5.0

    展开全文
  • ,groups: 3 //只显示 3 个连续页码 ,first: '首页' //首页 ,prev: '上一页' ,next: '下一页' ,last: '页' //页 ,limit:10 ,limits:[10,20,30] } ,request: { pageName: 'page' // 页码的参数名称,默认:page , ...
  • 汽车尾灯控制电路

    千次阅读 2008-10-14 10:40:00
        动 1s 4s                       图 6-1 彩灯控制系统结构框图   设计题目七 : 灯光显示电路 一....
  • A,C CR + 1 CR Y Y N N Sx + Sy SA 兑涩溉爹错寓漫会萄南砚拢啪及复藕膏峭昌射蝶双芳校忱歼编蕴糙袋亡计算机组成原理第八讲(运算方法)计算机组成原理第八讲(运算方法) 定点乘法运算 运算规则 操作数、结果用原码...
  • 导语 | CBS云硬盘为腾讯云客户提供了⾼可靠、⾼可⽤和低成本的统⼀块存储服务。CBS针对数据安全、云服务器⽣产、资源均衡、云盘介质升级等场景下的数据调度能⼒需求,抽象出统⼀数据调度平台。本文是对腾讯云存储...
  • 凯悦酒店集团安达仕品牌位于亚洲地区的第六家酒店 -- 厦门安达仕酒店昨日正式幕。位于厦门城区核心区域 -- “湖滨南”商务区,厦门安达仕酒店紧邻城中潮流生活方式新地标 -- 华润万象城...
  • 既然树莓派可以开启热点模式,那我们何不让它实现开机自,将其变成一个小型"路由器"呢? 三、设置开机自启动创建WiFi热点 1.修改WiFi热点系统服务 用gedit编辑器打开文件,可以方便利用鼠标修改,用系统自带的nano...
  • ubuntu下 设置开机自脚本,启动java程序,并且作为守护进程检测java程序的运行状态,如果应用进程被杀掉,自动重启 java程序是jar包启动,读取jar包外部配置文件,需要先写一个外部的配置文件,然后再写一个java ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 6,458
精华内容 2,583
关键字:

启尾