- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在寻找一种使用 IEEE 浮点算法和标准三角函数为所有 x 计算 (x-sin(x))/(x^3) 的非常快速的方法。在 0 时,它应该返回 1/6。
对于 sin(x)/x,检查 x=0 并返回 1 就足够了,否则只需使用标准浮点 sin 和除法来计算它。对于 (1-cos(x))/x^2,如果 cos(x) <= 0,则此表达式可以按原样使用,否则表示为 (sin(x)/x)^2/(1+cos(x ))
但我不知道如何表达 (x-sin(x))/x^3。
到目前为止,我所拥有的最好的方法是计算无限和直到它收敛:$\sum_0^{\infty}{1/4^(n+1)sin(x/2^n)/(x/2^n)(1-cos(x/2^n))/(x/2^n)^2}$但我更喜欢封闭形式
最佳答案
(1 - cos x)/x2 与 (x - sin x)/x3 根本不同/em>,因为单位可以通过三角函数构造为 sin2 x + cos2 x = 1,而 sin2 x = 1 x 为真。这意味着我们无法将后一个函数转换为数值上有利的封闭式三角函数公式。我想了很久,也尝试用我知道的所有三角恒等式来操纵公式。我很想被证明是错误的;这似乎是 Math Stack Exchange 的一个问题。实现前一个功能最简单最准确的方法是
// (1-cos(x))/x**2
double cosm1_over_xsquared (double x)
{
if (fabs (x) < sqrt (DBL_EPSILON)) {
return 0.5;
} else {
double s = sin (x * 0.5) / x;
return 2.0 * s * s;
}
}
如果标准数学库计算 sin()
时误差略高于半个 ulp,则此实现计算 (1 - cos x)/x2 误差不超过 4 ulp。作为旁注,此函数也适用于 Kahan 的 self 校正技术的使用,他首先展示了用于计算 (ex - 1)/x 在
William M. Kahan,“提议的 IEEE 浮点算术标准中的区间算术”。载于 Karl L. E. Nickel(编),Interval Arithmetic 1980,Academic Press 1980,第 99-128 页。
// (1-cos(x))/x**2 on [-3, 3] using Kahan's self-compensation technique
double cosm1_over_xsquared_kahan (double x)
{
double u = cos (x);
double n = 1.0 - u;
if (n == 0.0) {
return 0.5;
}
double d = acos (u);
return n / (d * d);
}
如果 cos()
和 acos()
的最大误差略高于 ulp 的一半,则此函数返回的结果误差小于 5 ulp。因为 cos,而不是 ex 是周期函数,所以这种方法仅适用于代码注释中注明的受限区间。
以上建议我们应该以最大误差约为 4 ulp 的方式实现 (x - sin x)/x3。表征朴素计算,我们发现它足以满足 |x| > 1 根据此规定。尽管替代计算的输入域很窄,但 Kahan 的 self 补偿技术不对该函数不起作用。然而,数学函数实现者的旧备用,多项式极小极大逼近,工作得很好。这导致以下代码:
// (x-sin(x))/x**3
double sinmx_over_xcubed (double x)
{
if (fabs(x) < 1.0) { // minimax approximation
double x2 = x * x;
double p = 7.5475867852548673E-13;
p = p * x2 - 1.6057658525730946E-10;
p = p * x2 + 2.5052098906959416E-8;
p = p * x2 - 2.7557319191306421E-6;
p = p * x2 + 1.9841269841218293E-4;
p = p * x2 - 8.3333333333333055E-3;
p = p * x2 + 1.6666666666666666E-1;
return p;
} else {
return (x - sin (x)) / x / x / x;
}
}
关于precision - 计算 (x-sin(x))/x^3 的数值稳定方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74103763/
我想打印精度为 4 的 float 。我使用 numpy , jupyter notebook我试过: %precision %.4g %precision 2 np.set_printoptions
我不知道如何解决这个问题,我知道浮点数的显式、隐式和 IEEE-754 规范化表示,但如何将其分解为小问题。请帮我想象一下。 最佳答案 让我们假设 IEEE-754 单精度浮点数。在这样一个浮点数中,
我有一个从 Azure Log Analytics 查询返回的值(以字节表示): 我想将其转换为兆字节并使其更易于阅读。在本例中为“4.19 MB”。 当我尝试将字节值转换为兆字节时,我似乎无法让 K
我最近收到的一项家庭作业要求我们采用在计算机中执行时可能会造成精度损失的表达式,并对其进行更改以避免这种损失。 不幸的是,执行此操作的指示尚未非常明确。通过观察各种正在执行的示例,我知道有一些方法可以
这更多的是一个数值分析问题,而不是编程问题,但我想你们中的一些人能够回答它。 在两个 float 相加中,是否有精度损失?为什么? float 和整数相加时,是否有精度损失?为什么? 谢谢。 最佳答案
所以我知道浮点精度(以及 1.1 之类的东西如何不能用二进制精确表示)等等,但我想知道:那么,与数学相关的库如何实现无限精度?换句话说,例如,您将如何以二进制形式准确地表示 1.1?只是一个简短的描述
阅读本文 http://en.wikibooks.org/wiki/Ada_Programming/Types/delta 让我想知道 delta 的极限值是多少是。 例如 delta 127 ran
我有一个文档数据库,我可以在其中执行搜索。对于每一次搜索,都有 n 个肯定。现在,如果我通过 precision@k 和 recall@k 来评估搜索的性能,那么对于后者来说一切都很好: recall
我注意到在 Modelica(使用 Wolfram System Modeler 4.3)中集成延迟固定时间量的脉冲输入的数值问题: model PulseTest "Test FixedDelay
我看过很多关于系统时钟的讨论,据说例如标准 PC 时钟,例如Windows 的精确度仅为+/-10 毫秒,而实时系统时钟的精确度为亚毫秒级。但这些说法意味着什么?这种时序变化的严重程度完全取决于测量时
我一直在阅读一些内容,但我很难理解如何解释“数字 x”。即: type something is digits 6 我知道它的精度是 6 位数字,但我想让我困惑的是这是什么意思。 1) Y.XXXXX
我的 Elasticsearch 映射(我使用的是 ES 2.1)中有一个 date 类型的字段(输入格式 epoch_second)。我知道我可以在该字段上进行排序 { "sort": [
我在 C++ 中使用 CPLEX 来解决集线器位置问题,即 MIP,并且我最近发现了一组非常精确的输入,CPLEX 认为这些输入是不可行的(即 CPXMIP_INFEASIBLE),即使该问题确实可行
简单地说,魔术函数 %precision 不考虑简单变量输出的浮点精度。 #Configure matplotlib to run on the browser %matplotlib noteboo
我正在尝试使用 sass + compass 来制作流体网格,并且在计算它们时我需要我的 % 至少有 8 位数字,但现在 sass + compass 正在将我的小数四舍五入为 3 位数字。我发现如果
希望如此,我可以第一次发帖,告诉我我想问的问题。 我有cpp代码,可记录从fpga向下到纳秒级的时间戳。它将此值写入CSV。在同一个csv中,我正在计算连续时间戳之间的差异。 当我将其导出到pytho
我用JAVA编写了以下方法: public static float surface(float r) { return(4*Math.PI*Math.pow(r,2));
我试图找出为什么我的 Java 程序中会出现这种精度丢失错误。 这是错误: error: possible loss of precision int digit = num/Mat
关于 java-7 功能“精确重新抛出”和 final Exception ex 有很多问题,我找不到我的问题的明确答案。 “精确重新抛出”和final Exception之间有什么关系? publi
SciPy interpolation有 3 种支持的方法: Supported are “linear” and “nearest”, and “splinef2d”. “splinef2d” is
我是一名优秀的程序员,十分优秀!