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和乘以一个小数字之间的速度将完全没有区别,因为在这两种情况下执行的机器代码完全相同。编译器不知道数组的内容。如果您想问,这两个操作中哪一个更快
嗯,我认为在极限值中,1将比2快。如果你问,就像你看起来的那样,这两个操作中哪一个更快:
嗯,我认为在极限值中,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)。