zoukankan      html  css  js  c++  java
  • float有效数字分析,附:las数据偏移量设置

    float占4个字节,使用科学计数法表示,形式为 1.abcdefg × 10n,1是固定值,故省略掉, 第31个字节表示正负,第30~23位共8个字节是指数位,第22~0位共23个字节是小数位。

    8个字节指数位范围与byte字节的整数范围一样,-128~128

    23个字节的小数位的范围是:223 = 8388608,这是一个7位数字,加上省去的1,因此float最大有8位有效数字,保证有7位有效数字。

    由于float的指数部分对应的指数范围为-128~128,所以取值范围为: 

    -2^128到2^128,约等于-3.4E38 — +3.4E38 

    1     float  a = 138870.826789;
    2     double b = 138870.826789;
    3     cout.setf(ios::fixed);
    4     cout.precision(6);
    5     cout << "float  " << a << endl;
    6     cout.precision(6);
    7     cout << "double " << b << endl;

    如上代码所示,不论怎么改变小数点第三位及以后的值,float类型都不能正确输出小数点第三位:

    可以正确表示前8位,有8位有效数字。

    当float的第1位数字大于2时,

    1     //         338860 8
    2     float  a = 338870.826789;
    3     double b = 338870.826789;
    4     cout.setf(ios::fixed);
    5     cout.precision(6);
    6     cout << "float  " << a << endl;
    7     cout.precision(6);
    8     cout << "double " << b << endl;

    结果为:

    小数点后的第二位以后就不能正确表示了,有效数字只有7位。

    对于地理坐标而言:

    如上数据,高斯克吕格3°带投影,x、y坐标第一位数字基本都会大于1,因此对于投影坐标而言,有效数字只有7位。

    所以,在将地理投影数据存储为las格式时,las是以float类型存储数据的,float为7位有效数字,当要保证mm级精度时,

    las的偏移量的适用范围为10km,超出这个范围要重新指定偏移量,否则就会有精度损失了。

  • 相关阅读:
    NOIP2009 靶形数独
    NOIP2014 寻找道路
    NOIP2005 篝火晚会
    NOIP2014 联合权值
    NOIP2011 选择客栈
    luogu2659 美丽的序列
    NOIP2008 传纸条
    vijos1642 班长的任务
    codevs1427 RQNOJ204 特种部队
    AC自动机
  • 原文地址:https://www.cnblogs.com/xingzhensun/p/6281991.html
Copyright © 2011-2022 走看看