Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/127.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 浮点128与双精度运算_C++_Floating Point_Ieee 754_Double Double Arithmetic - Fatal编程技术网

C++ 浮点128与双精度运算

C++ 浮点128与双精度运算,c++,floating-point,ieee-754,double-double-arithmetic,C++,Floating Point,Ieee 754,Double Double Arithmetic,我在维基百科上看到,实现四精度的某种方法是使用双精度算术,即使它在比特数方面的精度不完全相同: 在本例中,我们使用两个double来存储值。我们做了两次运算来计算结果,每两次运算一次 在这种情况下,我们可以对每一个双精度点进行四舍五入误差,或者他们的双精度点是一种避免这种情况的机制 在这种情况下,我们使用两个double来存储值。因此每次需要进行两次操作 这不是双精度算术的工作原理。根据实际执行的操作、融合乘加操作的可用性、一个操作数大于另一个操作数的假设、以及 例如,这里是一个双乘法的实现,用

我在维基百科上看到,实现四精度的某种方法是使用双精度算术,即使它在比特数方面的精度不完全相同:

在本例中,我们使用两个double来存储值。我们做了两次运算来计算结果,每两次运算一次

在这种情况下,我们可以对每一个双精度点进行四舍五入误差,或者他们的双精度点是一种避免这种情况的机制

在这种情况下,我们使用两个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
 */
您可以在中找到用于实现这些结果的所有机制

在这种情况下,我们使用两个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 嗯。即使他们的运算量较小,在大多数情况下,由于分支的原因,您的速度也较慢。我不记得这是来自浮点运算手册还是计算机编程艺术。对我来说,最重要的是确保使用补偿算法:-