浮點數對比我有一個循環來爲後續關於C++
#include <iostream>
using namespace std;
void main(void)
{
for (double x=0.012; x<=0.013; x+=0.001)
{
cout << x << endl;
}
}
給出的最小和最大範圍之間的浮點數這是很簡單的代碼,但我知道在計算機語言中,我們需要比較考慮EPS的兩個浮動數字。因此,上面的代碼不起作用(我們期望它從0.012到0.013循環兩次,但它只循環一次)。所以我手動添加一個EPS到上限。
#include <iostream>
using namespace std;
#define EPS 0.0000001
void main(void)
{
for (double x=0.012; x<=0.013+EPS; x+=0.001)
{
cout << x << endl;
}
}
它現在起作用。但是手動操作看起來很難看,因爲EPS實際上取決於機器。我將我的代碼從matlab移植到C++,並且我沒有matlab中的問題,因爲有eps命令。但是在C/C++中有這樣的嗎?
不,沒有內置任何東西。浮點容差和錯誤處理取決於應用程序。 – Barmar
而不是迭代浮點值,迭代整數,然後除以1000.0得到分數。 – Barmar
支持@ Barmar的評論。累積浮點加法會累積舍入誤差。對於更大的迭代次數,EPS可能需要更大。同時,你可以用整數表達你想要的迭代次數。 –