Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.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++ 检测几乎为零并将其替换为0.0或将其保留为小数字的速度更快吗?_C++_Visual Studio 2008_Math_Numerical Methods - Fatal编程技术网

C++ 检测几乎为零并将其替换为0.0或将其保留为小数字的速度更快吗?

C++ 检测几乎为零并将其替换为0.0或将其保留为小数字的速度更快吗?,c++,visual-studio-2008,math,numerical-methods,C++,Visual Studio 2008,Math,Numerical Methods,我正在编写一个数值分析程序,有时微积分会给出一些非常小的系数,即a0=1.234542e-12 如果我计算一个由10个值组成的数组(即其中6个值是小数字),然后再将每个值乘以t^x(仅作为示例) 当x=1:10时,什么计算速度更快 就让小数目保持原样吧 检测低于阈值的数字,并将其替换为0.0 这个问题主要是因为编译器可能不会将一个数乘以0,因为它总是0,或者它可能只是将它相乘,我会使程序变慢,因为我添加了if条件,只是为了检查数字是否为0。我假设数组不是常量,而是程序的中间结果 那么,乘以0

我正在编写一个数值分析程序,有时微积分会给出一些非常小的系数,即
a0=1.234542e-12

如果我计算一个由10个值组成的数组(即其中6个值是小数字),然后再将每个值乘以t^x(仅作为示例) 当x=1:10时,什么计算速度更快

  • 就让小数目保持原样吧
  • 检测低于
    阈值的数字
    ,并将其替换为0.0

这个问题主要是因为编译器可能不会将一个数乘以0,因为它总是0,或者它可能只是将它相乘,我会使程序变慢,因为我添加了
if
条件,只是为了检查数字是否为0。

我假设数组不是常量,而是程序的中间结果


那么,乘以0和乘以一个小数字之间的速度将完全没有区别,因为在这两种情况下执行的机器代码完全相同。编译器不知道数组的内容。

我假设数组不是常量,而是程序的中间结果


那么,乘以0和乘以一个小数字之间的速度将完全没有区别,因为在这两种情况下执行的机器代码完全相同。编译器不知道数组的内容。

如果您想问,这两个操作中哪一个更快

  • 乘以一个数字向量,包括一些接近0.0的数字
  • 通过设置为0.0的数字向量运行接近0.0的数字,然后乘以该向量

  • 嗯,我认为在极限值中,1将比2快。

    如果你问,就像你看起来的那样,这两个操作中哪一个更快:

  • 乘以一个数字向量,包括一些接近0.0的数字
  • 通过设置为0.0的数字向量运行接近0.0的数字,然后乘以该向量

  • 嗯,我认为在极限值中,1将比2快。

    对于10个数字的数组,你将看不到任何区别。你应该重视正确性而不是速度。嗯,一个值乘以0就是零,而一个值乘以一个小值就是另一个小值。在一长串计算中,最终结果可能会有很大的不同,这取决于你是否将小值替换为零。@Oded是的,当然正确性超过了速度,但是当我知道程序经常给我1.0时,它会给我1.00000001,即使精确的正确结果是1.0(用手和matlab检查),所以我猜1.0e-12一定是一个数值演算错误。测试我的软件这种最小的数值误差随着时间的推移,它们总是收敛到一个结果,而不是0也是1.0e-12阶(通常它们自身相乘或其他小值)。所以我的问题还是朝着同一个方向。哪一个更快?您还应该选择浮点操作行为(请参阅-对于Visual Studio,与浮点操作相关的标志-对于GCC)。对于10个数字的数组,您将看不到任何差异。您应该将正确性置于速度之上。值乘以零即为零,而一个值乘以一个小值就是另一个小值。在一长串计算中,最终结果可能会有很大的不同,这取决于你是否将小值替换为零。@Oded是的,当然正确性超过了速度,但是当我知道程序经常给我1.0时,它会给我1.00000001,即使精确的正确结果是1.0(用手和matlab检查),所以我猜1.0e-12一定是一个数值演算错误。测试我的软件这种最小的数值误差随着时间的推移,它们总是收敛到一个结果,而不是0也是1.0e-12阶(通常它们自身相乘或其他小值)。所以我的问题还是朝着同一个方向。哪一个更快?您还应该选择浮点操作行为(请参阅-对于Visual Studio,与浮点操作相关的标志-对于GCC)。