给定实变量的实函数,是否有可用的软件可以自动生成数字精确的代码来计算配备 IEEE 754 算法的机器上所有输入的函数?
例如,如果要评估的实际功能是:
该软件将考虑灾难性取消,并可能针对某些输入集进行输出表查找,以避免计算准确性的损失。
或者,是否有软件可以生成纯基于表的查找例程来高精度计算给定函数?
给定实变量的实函数,是否有可用的软件可以自动生成数字精确的代码来计算配备 IEEE 754 算法的机器上所有输入的函数?
例如,如果要评估的实际功能是:
该软件将考虑灾难性取消,并可能针对某些输入集进行输出表查找,以避免计算准确性的损失。
或者,是否有软件可以生成纯基于表的查找例程来高精度计算给定函数?
我所知道的最佳解决方案是在Mathematica、Maple或SymPy中编写符号表达式;所有链接都直接指向代码生成文档。以上所有程序都可以生成 C 或 Fortran 代码。
上述程序均未提及 IEEE 754 算术的准确性;正如@dmckee 所指出的,一般来说,很难预测灾难性取消的所有来源。在数值分析中很难取代人类的专业知识。
为了提供一个具体的例子,考虑计算三角函数到高精度的任意输入. 这样做有很多策略,有些甚至依赖于硬件,如 Wikipedia 文章Trigonometric Tables中所示。所有算法都需要独创性和数值分析,即使是依赖于查找表和泰勒级数或插值的算法(参见维基百科文章制表者的困境)。有关更多详细信息,请参阅相关的堆栈溢出问题三角函数如何工作?.
生成代码或例程以高精度计算任意函数的软件不仅需要了解取消错误,还需要了解用于计算未定义的函数的级数近似值有限数量的加法、减法、乘法、除法和位移。(参见近似理论。)
如果您想知道我们离这样的软件包还有多远,请查看 2001 LAPACK 工作说明,关于可靠有效地计算 Givens 旋转。我希望数值分析领域的大多数非专业人士(以及许多专家!)都会惊讶于在解决这样一个表面上简单的问题时需要进行多少分析:
给定, 寻找和这样
在哪里是单一的。平衡可靠性与计算效率以及更微妙的问题(如连续性)是非常重要的,并且在可预见的未来不太可能实现自动化。