У меня есть цикл в цикле число с плавающей в пределах между минимальным и максимальным диапазоном, как следоватьо флоат номер Comparision в 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 может потребоваться больше для большего количества итераций. Между тем, у вас есть мнение о том, сколько итераций вы хотите, в целочисленных терминах. –