精华内容
参与话题
问答
  • 关于精度问题 在计算几何的计算中,精度问题是一个很常见的问题。 这是由于计算机存储浮点数时保留的精度有限而产生的。 即使用两个实型变量来存储同一个数字,都有可能产生误差。 因此在判定实型变量大小关系时...

    关于精度问题

    在计算几何的计算中,精度问题是一个很常见的问题。

    这是由于计算机存储浮点数时保留的精度有限而产生的。

    即使用两个实型变量来存储同一个数字,都有可能产生误差。

    因此在判定实型变量大小关系时,若直接采用=,><进行比较,很有可能出错。

    一般常见的解决方法是设定一个极小量epsilon(一般写作eps)来辅助比较。

    比如判定两个浮点数是否相等时,我们检查两个浮点数之间的差值。若差值小于eps时,我们就认为这两个浮点数相等:

    equals(double x, double y):
        eps = 1e-6 // 根据题目要求的精度范围来设定eps
        If (abs(x - y) < eps) Then
            Return True
        End If
        Return false
    

    同样,其它比较符号也需要做对应的修改,具体可以参考下表:

    原符号       修正
    a == b      abs(a-b) < eps
    a != b      abs(a-b) > eps
    a > b       a-b > eps
    a >= b      a-b > -eps
    a < b       a-b < -eps
    a <= b      a-b < eps

    注:摘自hihocder的一篇题解 http://hihocoder.com/discuss/question/3573

    转载于:https://www.cnblogs.com/yspworld/p/5773637.html

    展开全文
  • 浮点数的范围和精度问题(从原理到结论)

    万次阅读 多人点赞 2018-03-10 23:58:00
    浮点数的范围和精度问题(float和double的比较) 今天遇到一道C++题,非常简单,就是比较两个浮点数是否相等。我的第一思路就是输入两个double类型的变量a,b,看a-b的绝对值是否小于1e−81e^{-8},是则相等。 但是...

    浮点数的范围和精度问题(float和double的比较)

      今天遇到一道C++题,非常简单,就是比较两个浮点数是否相等。我的第一思路就是输入两个double类型的变量a,b,看a-b的绝对值是否小于1e8,是则相等。

    SouthEast

      但是!!!问题并没有到这里结束,我去瞄了一眼其他人的解法,发现居然可以输入float类型的变量,然后直接用逻辑判断==就可以了,然后在线测评也通过了,也是非常神奇。于是对float和double类型的范围和精度产生了兴趣,为啥误差精度为1e8时float类型的数就能直接判断,而double却不行呢?
      到网上搜罗到了一些解答,本文对其进行了归纳整理。

    1. 关于浮点数的精度与取值范围的问题
    2. float的范围和有效数字怎么算出来的?
    3. float与double的范围和精度
    4. float和double的精度
    5. 维基百科 IEEE 754标准(二进制浮点数算术标准)

       这首先得从浮点数在计算机中的表示和存储方式说起。
      
       根据IEEE标准,浮点数是通过科学计数法来存储的,比如120.5用十进制的科学计数法来表示就是1.205×102,但是计算机中所有数据都是用二进制存储的,所以得先转换为二进制数,即1.1110001×26

    SouthEast

      
       浮点数在计算机中的存储分为三个部分:
       1. 符号位(sign):float和double符号位均为1位,0代表正数,1代表负数
       2. 指数位(exponent):存储科学计数法中的指数部分,采用移位存储
       3. 尾数位(fraction):存储科学计数法中的尾数部分

    70

      根据IEEE 754标准,单精度float类型使用32比特存储,其中1位表示符号,8位表示指数,23位表示尾数;双精度double类型使用64比特存储,1位符号位,11位指数位,52位尾数位。
      然后再来讲讲移位存储。拿float来举例,内存中使用32位来存储float浮点数,其中第1位表示浮点数正负,第2~9位表示指数,后23位表示指数。表示指数的8位二进制虽然连续,但并不在同一字节中(实际上是由第一字节的后7位和第二字节的第1位组成),然后这8位指数位的第1位也是用来表示正负……然后我就没怎么弄懂了,欢迎大家赐教。总之如果按照移位存储,指数值最后需要加上偏移值127就对了。
      

    浮点数的范围

      后来发现在头文件float.h里其实已经解释的很清楚了(所以说没事多翻翻源码总是没错的):


    SouthEast

    float能够表示的最大值为3.40×1038,最小区分精度约为1.19×107(这一点和最开始那道题目有点矛盾,等我尝试几组数据之后再补充)。

    SouthEast

    float能够表示的最大值为1.80×10308,最小区分精度约为2.22×1016

    不过这宏定义的最大最小值感觉并不是我们所认为的“不溢出内存的情况下所能表示的最大数字”,我现在也说不清,留个问题之后慢慢琢磨好了。

    浮点数的精度

      这个解释起来轻松一点,精度这里指的是最大有效数字的位数,即只需要考虑尾数部分就可以啦。
      对于float类型,尾数部分是23,转换成10进制的精度,223=10x –> x=23log26.92,所以23位2进制最多只能表示6位10进制数,这里就是头文件中FLT_DIG=6的来由。
      但还有一种说法,也是网上的主流说法,二进制小数点的第一位永远都是1,可以省略,实际上二进制的精度为24,所以10进制的精度为7。

    展开全文
  • 精度,单精度和半精度

    万次阅读 2017-11-17 09:56:29
    浮点数是计算机上最常用的数据类型之一,有些语言甚至...半精度是英伟达在2002年搞出来的,双精度和单精度是为了计算,而半精度更多是为了降低数据传输和存储成本。 很多场景对于精度要求也没那么高,例如分布式深

    浮点数是计算机上最常用的数据类型之一,有些语言甚至数值只有浮点型(Perl,Lua同学别跑,说的就是你)。

    常用的浮点数有双精度和单精度。除此之外,还有一种叫半精度的东东。

    双精度64位,单精度32位,半精度自然是16位了。

    半精度是英伟达在2002年搞出来的,双精度和单精度是为了计算,而半精度更多是为了降低数据传输和存储成本。

    很多场景对于精度要求也没那么高,例如分布式深度学习里面,如果用半精度的话,比起单精度来可以节省一半传输成本。考虑到深度学习的模型可能会有几亿个参数,使用半精度传输还是非常有价值的。

    Google的TensorFlow就是使用了16位的浮点数,不过他们用的不是英伟达提出的那个标准,而是直接把32位的浮点数小数部分截了。据说是为了less computation expensive。。。

    比较下几种浮点数的layout:

    双精度浮点数placeholder

    单精度浮点数placeholder

    半精度浮点数placeholder

    它们都分成3部分,符号位,指数和尾数。不同精度只不过是指数位和尾数位的长度不一样。

    解析一个浮点数就5条规则

    1. 如果指数位全零,尾数位是全零,那就表示0
    2. 如果指数位全零,尾数位是非零,就表示一个很小的数(subnormal),计算方式 (−1)^signbit × 2^−126 × 0.fractionbits
    3. 如果指数位全是1,尾数位是全零,表示正负无穷
    4. 如果指数位全是1,尾数位是非零,表示不是一个数NAN
    5. 剩下的计算方式为 (−1)^signbit × 2^(exponentbits−127) × 1.fractionbits

    常用的语言几乎都不提供半精度的浮点数,这时候需要我们自己转化。

    具体可以参考Numpy里面的代码:

    https://github.com/numpy/numpy/blob/master/numpy/core/src/npymath/halffloat.c#L466

    当然按照TensorFlow那么玩的话就很简单了(~摊手~)。

    参考资料:

    https://en.wikipedia.org/wiki/Half-precision_floating-point_format

    https://en.wikipedia.org/wiki/Double-precision_floating-point_format

    https://en.wikipedia.org/wiki/Single-precision_floating-point_format

    http://download.tensorflow.org/paper/whitepaper2015.pdf

    展开全文
  • 准确率,精度与召回率

    千次阅读 2018-08-20 12:11:15
    准确率,精度与召回率 假设某鱼塘有100条鱼,鲤鱼80条,鲫鱼20条,目标是捕到所有鲫鱼。让某人捕50条鱼,其中20条是鲫鱼,另外30条鲤鱼也当做鲫鱼被捕到。评估此人工作。 TP(True Positive):被判定为正样本,...

    准确率,精度与召回率

    假设某鱼塘有100条鱼,鲤鱼80条,鲫鱼20条,目标是捕到所有鲫鱼。让某人捕50条鱼,其中20条是鲫鱼,另外30条鲤鱼也当做鲫鱼被捕到。评估此人工作。

    TP(True Positive):被判定为正样本,事实上也是正样本。

    TN(True Negative):被判定为负样本,事实上也是负样本。

    FP(False Positive):被判定为正样本,但事实上是负样本。

    FN(False Negative):被判定为负样本,但事实上是正样本。

    此时:TP=20,TN=50,FP=30,FN=0

    准确率

    对于给定的测试数据集,分类器正确分类的样本数与总样本数之比。也就是损失函数是0-1损失时测试数据集上的准确率

    Accuracy=(TP+TN)/100=70%

    精度

    它计算的是预测正类预测正确的样本数,占预测是正类的样本数的比例。

    Precision=TP/(TP+FP)=40%

    召回率

    它计算的是预测正类预测正确的样本数,占实际是正类的样本数的比例

    Recall=TP/(TP+FN)=100%

    展开全文
  • Python中的精度损失问题

    千次阅读 2019-01-16 16:53:53
    Python中的精度损失问题引言示例问题问题解决 引言 在写python程序时,我们不可避免地要和小数打交道,但是python的小数有一个精度损失的问题,那么怎样来解决呢? 示例问题 加入你想开发一个程序将一定数量的钱分类...
  • 解决精度问题

    2020-10-29 09:04:35
    解决精度问题 以一道题为例 求以下三数的和,保留2位小数 1~a之和 1~b的平方和 1~c的倒数和 样例输入: 100 50 10 样例输出: 47977.93 注意: 结果有小数部分 小数要保留两位 要解决相应的精度问题 解决办法 1....
  • 分辨率与精度的区别

    千次阅读 2019-06-17 10:40:19
    对于传感器的分辨率与精度的理解,可以拿千分尺为例,分辨率代表千分尺最多可以读到小数点后几位,但精度还与尺子的加工精度,测量方法有关系。 同样的,在旋转编码器的使用中,分辨率与精度是完全不同的两个概念。...
  • 精度算法

    2020-11-21 23:57:45
    1、什么是高精度数 ​ 在一般的科学计算中,会经常算到小数点后几百位或者更多,当然也可能是几千亿几百亿的大数字。一般这类数字我们统称为高精度数,高精度算法是用计算机对于超大数据的一种模拟加、减、乘、除、...
  • 精度

    2020-04-23 10:32:21
    题意: 求T段字符和,每段以字符0,结束,代码直接理解 #include<stdio.h> #include<string.h> #define max 1100 char s1[max]; int a[max],b[max]; int main() { int T,i,j,len1;... ...
  • 分辨率和精度区别

    千次阅读 2019-03-26 09:43:56
    对于传感器的分辨率与精度的理解,可以拿千分尺为例,分辨率代表千分尺最多可以读到小数点后几位,但精度还与尺子的加工精度,测量方法有关系。 编码器的分辨率,是指编码器可读取并输出的最小角度变化,对应的参数...
  • float的精度和取值范围

    万次阅读 多人点赞 2019-06-16 12:11:00
    关于float的精度和取值范围这个问题,我查询了很多次,每次都是用完就忘了,等到再使用的时候还需要再次查询,关键是这个问题大家给出的结果并不都是一致的,我得从众多的资料当中选择出正确的观点,这还要额外花...
  • ENVI监督分类及精度评价

    万次阅读 2019-02-24 20:22:13
    对于ENVI监督分类,是每一个遥感从业者掌握的最基础的一个方法,但是完整的监督分类流程和精度评价,估计往往认识不够,所以以下的分享还是有点意义。 监督分类,又称训练分类法,用被确认类别的样本像元去识别其他...
  • 精度浮点数在机内占4个字节 双精度浮点数在机内占8个字节 (2)有效数字位数不同 单精度浮点数有效数字8位 双精度浮点数有效数字16位 (3)所能表示数的范围不同 单精度浮点的表示范围:-3.40E+38 ~ +3.40E+38 双...
  • 精度和双精度的区别

    万次阅读 多人点赞 2019-02-26 16:56:24
    1、单精度和双精度的字节数不同。前者占4个字节;后者占8个字节。 2、单精度和双精度有效数字位数不同。前者为8位;后者为16位。 3、单精度和双精度表示的数的范围不同。前者的数值范围在-3.40E+38 到 +3.40E+...
  • python实现计算精度、召回率和F1值

    万次阅读 2019-03-02 11:09:47
    python实现计算精度、召回率和F1值   摘要:在深度学习的分类任务中,对模型的评估或测试时需要计算其在验证集或测试集上的预测精度(prediction/accuracy)、召回率(recall)和F1值。本文首先简要介绍如何计算...
  • Java处理小数点精度

    千次阅读 2018-03-16 14:30:05
    Java处理小数点精度简介 java中提供了浮点数float和double类型表示小数计算,但是设计这2类型主要是为了科学计算和工程设计而设计的。因此,并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。特别是...
  • C++: 高精度加法与高精度减法

    千次阅读 2016-03-23 17:21:59
    C++: 高精度加法与高精度减法标签:C++ 高精度加法 高精度减法by 小威威在学C语言的时候,我有实现过高精度乘法(想了解的戳它)。 其实高精度加法、减法比乘法简单多了,所以可以通过高精度乘法这篇文章来入门高精度...
  • 本题要求编写程序,计算序列部分和 1 - 1/4 + 1/7 - 1/10 + … 直到最后一项的绝对值不大于给定精度eps。 输入格式: 输入在一行中给出一个正实数eps。 输出格式: 在一行中按照“sum = S”的格式输出部分和的值S,...
  • 精度地图介绍

    万次阅读 2019-01-17 11:42:06
    精度地图地图简介格式标准高精度地图VS传统地图制作过程 地图简介 供无人驾驶车辆是用的电子地图,精度达到厘米级; Aopllo高精度地图教程,视屏地址:...
  • C++高精度运算模板

    万次阅读 2014-04-06 17:16:22
    用C++实现大数类

空空如也

1 2 3 4 5 ... 20
收藏数 552,117
精华内容 220,846
关键字:

精度