当前位置: 首页 > 知识库问答 >
问题:

近似从双精度到单精度的转移

花健
2023-03-14

我很感激每一个暗示,关于转移目标的文件实现。我已经研究了一些关于浮动精度的论文,但在过去的两周里没有取得太大的进展。

提前感谢!

共有1个答案

家西岭
2023-03-14

生成多项式极小极大逼近的常用方法是使用俄罗斯数学家叶夫根尼·雷米兹于1934年发表的雷米兹交换算法。这是一个经常涉及病态方程组的数值过程。因此,它通常是在任意精度库的帮助下实现的。例如,在我使用的Remez算法的实现中,我将库配置为1024位精度。

对于表现良好的函数,Remez算法的各种变体可以找到非常接近数学极大极小多项式的逼近。正如问题中提到的,问题是当将多项式的生成系数移动到有限精度浮点计算时会发生什么。人们经常发现近似的极大极小性受到了损害,有时甚至严重地受到了损害。有两个错误来源在起作用。首先,生成的系数不能用有限精度浮点格式精确表示。第二,多项式的求值使用有限精度的运算而不是无限精度的数学运算。

第一个问题是比较容易解决的问题。从一些快速实验中可以看出,简单地将系数舍入到有限精度格式并不能实现期望的接近极小极大的结果。通过使用有限精度格式,我们基本上从一个n维连续空间转换到一个n维离散格点,为了正确地进行转换,我们需要找到最近的格点。这是一个可以解决但很难解决的问题,通常通过使用启发式使其变得更容易。相关文献:

Tor Myklebust,“在有限精度算术中计算特殊函数的精确Horner形式近似”,ArXiv手稿2015(在线)

Denis Arzelier,Florent Bréhard,Mioara Joldes,“求值和逼近误差优化多项式的交换算法”,载第26届IEEE计算机算术研讨会,2019年6月,第30-37页(在线)

请注意,第一次发布是由于我在StackOverflow上问了一个问题。

 类似资料:
  • 嗨,我最近看到了一个类似这样的问题 在我回答了这个问题后,事实证明我弄错了,我回答了整数。MIN_VALUE但正确的答案是整数。MAX_VALUE。经过进一步的测试,我意识到我对大于整数的int施加的任何双精度。MAX_VALUE只是使int等于整数。MAX_VALUE。例如 经过进一步的测试,我意识到如果你试图将long转换为int,似乎会将int分配给一个看似随机的数字。 所以我的问题是。到底

  • 问题内容: java中双值的乘法运算符的保证精度是多少? 例如,2.2 * 100是220.00000000000003,但是220是双精度数。220.00000000000003是220之后的下一个两倍。 问题答案: 乘法工作正常,但不能精确表示为双精度。最接近的双打是: 2.199999999999999733(0x4001999999999999) 2.200000000000000177(

  • 什么是“精度”?使用float和double时,单和双有什么区别?“单精度32位IEEE 754浮点”“双精度64位IEEE 754浮点”是什么意思?

  • 对于实现精确 IEEE 754 算术的 C99 编译器,是否存在型的 、的值,使得 ? 编辑:所谓“实现精确的IEEE754算法”,我指的是一个正确地将FLT_EVAL_METHOD定义为0的编译器。 提供符合IEEE 754标准的浮点数的C编译器只能将单精度除法替换为常数,如果所述逆本身可以完全表示为。 实际上,这种情况只发生在2的幂上。因此,程序员Alex可能确信< code>f / 2.0f

  • 我想用一个小数点和一个小数位的格式将任何双精度四舍五入为双精度,这样29575.347434将是2.3。 我试着用decimalFormat做这个,但当我试着我只得到了一个29575.3格式的字符串,带有一个,我不知道如何在保留值为双精度的同时去掉所有小数点。

  • 为什么此代码引发此异常: 线程“main”java.lang.ClassCastException:java.lang.Integer无法强制转换为java.lang.Double 而这个,运行良好: 两者都是尝试将整数转换为双精度,对吗?