关于浮点运算和定点运算

  1. 什么是定点数?
    https://baike.baidu.com/item/%E5%AE%9A%E7%82%B9%E6%95%B0/11030127
  2. 什么是定点运算?
    https://baike.baidu.com/item/%E5%AE%9A%E7%82%B9%E8%BF%90%E7%AE%97/1861887?fr=aladdin
  3. 什么是浮点数?
    https://baike.baidu.com/item/%E6%B5%AE%E7%82%B9%E6%95%B0/6162520?fr=aladdin
  4. 什么是浮点运算?
    https://baike.baidu.com/item/%E6%B5%AE%E7%82%B9%E8%BF%90%E7%AE%97/100607?fr=aladdin
  5. 为什么浮点数一定有误差?
    https://blog.csdn.net/qq_25847123/article/details/77587575
  6. 为什么精确运算要避免浮点运算?
    https://blog.csdn.net/iteye_11305/article/details/82671571
  7. 浮点运算原理详解:
    https://blog.csdn.net/tercel_zhang/article/details/52537726
  8. 定点数、浮点数运算类型的说明:
    https://blog.csdn.net/syb773849846/article/details/78123079
  9. Linux内核中为什么要避免浮点运算?
    https://zhidao.baidu.com/question/240448272188831724.html
  10. 定点与浮点运算 DSP 的比较
    https://blog.csdn.net/sunice121/article/details/25324089

小结:

浮点运算的缺点: 计算复杂度高,结果存在误差,受硬件平台影响大

浮点运算的优点: 可以表示实数,数的表示范围比较大,便于大型复杂算法的实现。


20190705

浮点转定点的方法——量化

  1. 根据“最小值”和“最大值”确定输入浮点值的范围。 (注:未必是实际数据的最小值和最大值。例如存在未知数据时需要根据经验值确定取数范围,或者需要去除数据中的极端值以免不合理地降低精度。)
  2. 根据精度需求确定输出定点值的范围,例如量化到0~255(整数)范围。
  3. 将浮点输入值映射到定点输出值,公式为y_int = scale * (x_float - x_min)。
  4. 根据应用需求对映射结果做细微调整,比如对浮点数为0的精度较为敏感的,需要将浮点0映射为整数定点值,其他浮点数的映射关系则据此做调整。(此想法源自Neon矩阵乘法加速优化中对量化的调整。)

20191210
以下内容摘自《计算机组成与设计 硬件/软件接口》(【美】David A. Patterson John L. Hennessy,王党辉 康继昌 安建峰等译)

  1. 浮点加法不能使用结合律。
    因为浮点数是实数的近似表示,且计算机算术精度有限,故结合律不能适用于浮点数。假设浮点数可以表示一个很大的数的范围,当两个不同符号的大数与一个小数相加时就会发生问题,即使用结合律会导致计算结果不一致,举例如下:
关于浮点运算和定点运算_第1张图片
2. **并行执行策略不一定适用于浮点数据类型。** 是否采用并行执行策略可能导致程序的计算结果不一致。即使是相同的代码和输入,每次运行使用不同数目的处理器可能导致浮点求和以不同的顺序进行,从而影响浮点加法的结果。 使用了浮点数的并行代码的运行结果可能与顺序执行的结果不一致,但仍可通过数值分析验证结果是否可信。

你可能感兴趣的:(算法)