C++ 浮点128与双精度运算
我在维基百科上看到,实现四精度的某种方法是使用双精度算术,即使它在比特数方面的精度不完全相同: 在本例中,我们使用两个double来存储值。我们做了两次运算来计算结果,每两次运算一次 在这种情况下,我们可以对每一个双精度点进行四舍五入误差,或者他们的双精度点是一种避免这种情况的机制 在这种情况下,我们使用两个double来存储值。因此每次需要进行两次操作 这不是双精度算术的工作原理。根据实际执行的操作、融合乘加操作的可用性、一个操作数大于另一个操作数的假设、以及 例如,这里是一个双乘法的实现,用于当FMA指令不可用时,取自: 仅前8个操作用于将操作数中的每一个double精确地分成两半,这样,每一侧的一半可以与另一侧的一半相乘,得到的结果正好是一个double。计算u1*v1,u1*v2,…就是这样做的 在mh和ml中获得的值可能重叠,因此最后3个操作用于将结果重新规范化为两个浮点数之和 在这种情况下,我们可以对每一个双精度点进行四舍五入误差,或者他们的双精度点是一种避免这种情况的机制 正如评论所说:C++ 浮点128与双精度运算,c++,floating-point,ieee-754,double-double-arithmetic,C++,Floating Point,Ieee 754,Double Double Arithmetic,我在维基百科上看到,实现四精度的某种方法是使用双精度算术,即使它在比特数方面的精度不完全相同: 在本例中,我们使用两个double来存储值。我们做了两次运算来计算结果,每两次运算一次 在这种情况下,我们可以对每一个双精度点进行四舍五入误差,或者他们的双精度点是一种避免这种情况的机制 在这种情况下,我们使用两个double来存储值。因此每次需要进行两次操作 这不是双精度算术的工作原理。根据实际执行的操作、融合乘加操作的可用性、一个操作数大于另一个操作数的假设、以及 例如,这里是一个双乘法的实现,用
/*
* computes double-double multiplication: zh+zl = (xh+xl) * (yh+yl)
* relative error is smaller than 2^-102
*/
您可以在中找到用于实现这些结果的所有机制
在这种情况下,我们使用两个double来存储值。因此每次需要进行两次操作
这不是双精度算术的工作原理。根据实际执行的操作、融合乘加操作的可用性、一个操作数大于另一个操作数的假设、以及
例如,这里是一个双乘法的实现,用于当FMA指令不可用时,取自:
仅前8个操作用于将操作数中的每一个double精确地分成两半,这样,每一侧的一半可以与另一侧的一半相乘,得到的结果正好是一个double。计算u1*v1,u1*v2,…就是这样做的
在mh和ml中获得的值可能重叠,因此最后3个操作用于将结果重新规范化为两个浮点数之和
在这种情况下,我们可以对每一个双精度点进行四舍五入误差,或者他们的双精度点是一种避免这种情况的机制
正如评论所说:
/*
* computes double-double multiplication: zh+zl = (xh+xl) * (yh+yl)
* relative error is smaller than 2^-102
*/
您可以在中找到用于实现这些结果的所有机制。恐怕您的问题既不清楚,又过于宽泛。下载并阅读crlibm_private.h中Add22和Mul22的定义,这将让您了解这些东西是如何工作的。恐怕您的问题既不清楚,又过于宽泛。下载并阅读crlibm_private.h中Add22和Mul22的定义,这将让您了解这些东西是如何工作的。好的,所以double-double算法是基于补偿算法的。所以当然你需要两个以上的op,这是我没有找到的。非常感谢。如果您使用FastTwoSum,只需稍加修改,您就有3个运算和绝对值,对于这一部分,有一个分支而不是6个运算:6到20个双精度operations@RomainPicot在我看来,如果我们假设参数的顺序是已知的,那么只进行3次运算而不计算条件的那一次是Add12,这不是一个双重操作,而是一个方便的辅助函数来编写它们。不管怎么说,计算操作的数量,不管实际执行的操作和可用的假设是什么,都不是一门精确的科学:你是对的。即使他们的运算量较小,在大多数情况下,由于分支的原因,您的速度也较慢。我不记得这是来自浮点运算手册还是计算机编程艺术。对我来说,最重要的是看到使用了补偿算法:-好的,所以double-double算法是基于补偿算法的。所以当然你需要两个以上的op,这是我没有找到的。非常感谢。如果您使用FastTwoSum,只需稍加修改,您就有3个运算和绝对值,对于这一部分,有一个分支而不是6个运算:6到20个双精度operations@RomainPicot在我看来,如果我们假设参数的顺序是已知的,那么只进行3次运算而不计算条件的那一次是Add12,这不是一个双重操作,而是一个方便的辅助函数来编写它们。不管怎么说,计算操作的数量,不管实际执行的操作和可用的假设是什么,都不是一门精确的科学:你是ri 嗯。即使他们的运算量较小,在大多数情况下,由于分支的原因,您的速度也较慢。我不记得这是来自浮点运算手册还是计算机编程艺术。对我来说,最重要的是确保使用补偿算法:-