zoukankan      html  css  js  c++  java
  • table maker's delimma

    table maker's delimma是计算机浮点数精度的一个问题。

    浮点数的表示方式

    计算机能表示的数字都是有理数,所有的有理数都可以归结为下面的模式:
    1.@@@ × 2####

    其中,@@@ 和 ####都表示0或1,上式的意思是任何一个有理数总可以表示为1点几 乘以 2的 ####次方。注意,这里都使用的是2进制。

    在计算机中一个浮点数就由三部分组成:

    • 符号位,1个bit,0或1表示正负
    • 小数部分,即上面的@@@,对float,小数位有23位,double float有52位
    • 指数部分,即上面的####,float有8位,double float有11位。

    不是所有的有理数都可以在计算机里表示。比如x=1.00000000....000001  当中间的0多于51个时,double float也无法容纳小数部分,计算机只能自动截取,把尾部的1忽略掉了。x的表示和1.0没有区别。可以精确存储的数,我们称作可表示的数。

    如何近似

    计算机无法存储一个无理数,我们只能使用无理数的有理数近似,而且这个。IEEE-745 规定了几种近似方法:靠近0,靠近+∞,靠近-∞,靠近最近的可以表示的有理数。

    table maker's delimma 

    对sin cos log 这类函数f,计算结果是无理数,我们不能用有限的小数位精确表示。那么如何计算 y=f(x)?计算机中我们使用近似值 y*。我们期望y和y* 的差距足够小。我们期望找到一个最小的整数m,使得 |y-y*|<2-m.

    困境在于,无论我们用无法找到一致的m,使得在任何一种近似方法下,保证y和y*的近似值是相同的。

    注释一下,这里的“一致”是一致收敛的一致,即对任何y和y*都存在一个相同的m。比如对y1,y1*可以用m1套住,但总有无法用m1套住的y2,y2*

    参考:

    http://perso.ens-lyon.fr/jean-michel.muller/Intro-to-TMD.htm

    http://www.vinc17.org/research/slides/aoc2000-11.pdf

  • 相关阅读:
    EntityFramework,配合Oracle.ManagedDataAccess配置Oracle数据库连接
    使用Speech实现js播放音频
    PushAsync is not supported globally on Android, please use a NavigationPage异常出现及解决方案
    Vs 2017初次配置Xamarin
    本地项目使用github管理
    服务注册和发现 Eureka
    FutureTask的理解
    Syncronized之偏向锁
    Syncronized之自适应自旋锁
    发布订阅-jedis
  • 原文地址:https://www.cnblogs.com/englefly/p/9162177.html
Copyright © 2011-2022 走看看