假设可以使用正确舍入的标准库函数,例如CRlibm中的函数.那么如何计算双精度输入的正确圆角立方根?
引用FAQ时,这个问题不是"[我]面临的实际问题".这有点像家庭作业.但立方根是经常发现的操作,可以想象这个问题是某人面临的实际问题.
由于"最好的Stack Overflow问题中有一些源代码",这里有一些源代码:
y = pow(x, 1. / 3.);
Run Code Online (Sandbox Code Playgroud)
上面没有计算正确的圆形立方根,因为1/3不能完全表示为a double.
补充说明:
的文章介绍如何计算浮点立方根,但推荐牛顿迭代算法的最后一次迭代(S)将不得不做更高精度的算法来计算正确舍入的双精度立方根.这可能是计算它的最佳方式,但我仍在寻找一种利用现有正确舍入标准化功能的快捷方式.
C99包含一个cbrt()函数,但不能指望所有编译器都能正确舍入甚至忠实.CRlibm的设计者本可以选择包含cbrt()在提供的功能列表中,但他们没有.可以参考其他正确舍入的数学函数库中可用的实现.
我正在寻找一个理由选择以下方法之一来计算一系列浮点的几何平均值x:
x,然后将它们全部相乘我听说过浮点数,乘法和除法输入的信息少于加法和减法.因此,我不考虑总和指数技巧.
我应该通过1或2计算几何平均值,为什么?
更新1,以回应评论:
所有x小于1且精度为double.它们的数量级在10 ^ -1到10 ^ -6之间.请假设最常用的计算第n个根的方法,因为我使用的是编程语言的内置函数.由于所有值都小于1,我担心下溢(?)而不是溢出.您可以假设x系列的长度为10 ^ 8的顺序