• 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,超出这个范围要重新指定偏移量,否则就会有精度损失了。

  • 相关阅读:
    Space Ant(极角排序)
    Marriage Match II(二分+并查集+最大流,好题)
    Leapin' Lizards(经典建图,最大流)
    Food(最大流)
    99. Recover Binary Search Tree
    97. Interleaving String
    100. Same Tree
    98. Validate Binary Search Tree
    95. Unique Binary Search Trees II
    96. Unique Binary Search Trees
  • 原文地址:https://www.cnblogs.com/xingzhensun/p/6281991.html
Copyright © 2020-2023  润新知