Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.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++ 算法中的数值精度检验_C++_Algorithm_Numerical - Fatal编程技术网

C++ 算法中的数值精度检验

C++ 算法中的数值精度检验,c++,algorithm,numerical,C++,Algorithm,Numerical,检查算法中数值精度的最佳实践是什么? 是否有任何建议的技术来解决“我们如何知道我们计算的结果是正确的”这一问题? 如果可能的话,C++中有一些数值精度增强的例子吗? 谢谢你的建议 /会有帮助的。我必须说有很多图书馆都这样做,我不知道哪一个最好。也许别人会给你一个好答案 不过,一般来说,您可以编写两次:一次精度不受限制,一次不需要验证两个。这就是我用我写的科学软件所做的。然后,我将写第三个,它可以实现更出色的速度提升。这样我就可以验证这三个。请注意,我知道这三个数字并不完全相等,但它们应该有足够的

检查算法中数值精度的最佳实践是什么? 是否有任何建议的技术来解决“我们如何知道我们计算的结果是正确的”这一问题? 如果可能的话,C++中有一些数值精度增强的例子吗? 谢谢你的建议

/会有帮助的。我必须说有很多图书馆都这样做,我不知道哪一个最好。也许别人会给你一个好答案

不过,一般来说,您可以编写两次:一次精度不受限制,一次不需要验证两个。这就是我用我写的科学软件所做的。然后,我将写第三个,它可以实现更出色的速度提升。这样我就可以验证这三个。请注意,我知道这三个数字并不完全相等,但它们应该有足够的重要数字作为佐证

要真正知道准确地获得误差有多大,请记住浮点数的运算顺序可能会导致很大的差异。这确实是一个具体的问题,但如果您知道某些数字的相对大小,您可以更改操作顺序以获得准确性(例如,按排序顺序乘以列表)。调查这件事的两个地方是

  • 浮点运算手册

例如,看看区间算术

它将产生结果的上限和下限


PS:还可以查看支持的整数间隔的int-types=100%精度。浮点类型=仅支持一小部分有理数。有理数(您可以选择)的任意精度是通过各种库实现的,这些库将有理数存储为2个整数,有时称为“小数”或“小数”@deathApril-
3/2==1
不是100%精度。只是程序员已经学会了期待。不幸的是,他们对浮点运算的了解还不够,不知道从
3.333*3.0
@PeteBecker
3/2==1
这样的表达式中可以得到什么,因为余数是1。@deathApril-显然是的。无论你在浮点运算中看到什么“异常”,都是对浮点运算正确的。正如我所说的,大多数程序员只是对浮点运算了解不够,无法正确使用。@deathApril:
3/2==1
,因为位数有限,特别是小数部分的0位。浮点小数部分的位数是可变的(这就是为什么它不是定点),但即使是可变的位数也是有限的。