floating-point - 点积的最坏情况精度是多少?

标签 floating-point floating-accuracy ieee-754

假设处理器只有符合 IEEE-754 的“fadd”和“fmul”操作(没有“dot”或“fma”指令)。点积运算的简单实现将达到的最坏情况精度是多少。例如,对于长度为 3 的向量:

dot(vec_a, vec_b) = vec_a.x*vec_b.x + vec_a.y*vec_b.y + vec_a.z*vec_b.z

这是我的分析,但我不确定它是否正确: 对于长度为 N 的向量,有 N 次乘法和 N-1 次加法,产生 2N-1 次浮点运算。在最坏的情况下,对于这些操作中的每一个,表示对于准确结果来说都太小了,因此中间结果将被四舍五入。每个舍入加起来 0.5 ULP 误差。那么最大误差将是 (2N-1)*0.5 = N-1/2 ULP?

最佳答案

与许多 FP 误差分析一样,误差在很大程度上取决于输入的最大幅度。在这种情况下,粗略的错误界限是 2 * FLT_EPS * dot(abs(vec_a), abs(vec_b)),其中 abs 表示元素绝对值向量的值。

关于floating-point - 点积的最坏情况精度是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23904373/

相关文章:

haskell - 为什么我的 SVG 弧线转换实现没有通过 QuickCheck?

C++ ofstream浮点编码

c - 顽固的位不会被设置为一个。

c# - double float 和 float 精度之间的差异

java - 使用 float "possible lossy conversion"的问题

c++ - 通过 0.0 时减去 float 时出错

java - Oracle 和 Java 中 double 值的区别 (IEEE 754)

ruby-on-rails - 将字符串 "2½"(两个半)转换为 2.5

Java 浮点意外圆角化

python - 以一致或固定的精度打印数字