fsc*_*itt 2 c++ floating-point image-processing
我在C++中有一些图像处理代码,它使用霍夫变换算法计算梯度并在其中找到直线.该程序使用浮点数进行大部分计算.
当我在两台不同的计算机上的同一图像上运行此代码时,一台Pentium IV运行最新的Fedora,另一台运行Core i5最新的Ubuntu,32位,我得到的结果略有不同.例如,我对一台机器上的某些变量进行了长时间的计算1.3456f,另一台机器上的变量为1.3457f.这是预期的行为还是我应该在程序中搜索错误?
我的第一个猜测是,我正在访问一些未初始化或超出范围的内存但是我确实通过valgrind运行程序并且它找不到任何错误,同时在同一台机器上运行多次也总是给出相同的结果.
Pau*_*l R 12
这并不罕见,它取决于您的编译器,优化设置,数学库,CPU,当然还有您正在使用的算法的数值稳定性.
您需要很好地了解您的准确度要求,如果您不满足这些要求,那么您可能需要查看您的算法,例如在需要时考虑使用double而不是float.
有关为什么给定源代码可能不会在不同计算机上产生相同输出的背景信息,请参阅每位计算机科学家应了解的有关浮点运算的知识。我怀疑这是由于您的代码的任何不足,除非它以不确定的方式执行聚合,例如。通过集中整理来自多个线程的计算结果。
浮点行为通常可以通过编译器选项进行调整,甚至可以调整到不同CPU的级别。检查您的编译器文档,以查看是否可以减少或消除差异。例如,在Visual C ++上,这是通过/ fp完成的。
| 归档时间: |
|
| 查看次数: |
2901 次 |
| 最近记录: |