c++ Перебор чисел с плавающей точкой

279
22 июля 2022, 06:00

Нужно узнать какие числа составляет число N из чисел a и b

к a и b должно с помощью цикла прибавлятся по 0.1 Делал что то типо такого:

double P, R;
cin >> P;
cin >> R;
for (double i = 0.1; i <= P; i = i + 0.1) {
    for (double j = 0.1; j <= P; j = j + 0.1) {
        double s = i + j;
        if (s == P) {
            cout << i << " " << j << endl;
        }
    }
}
cout << "END" << endl;

Но так как у числа не просто 0.1 а 0.1000000000...56 из за этого число переходит и не находит все цифры которые могут получится при сложении этих двух, особенно обычных напрмер для 13 (7 и 6)

Answer 1

во-первых double сравнивать можете так:

abs(s - P) < 0.0001

где 0.0001 - это заданная для вашей задачи точность, написал от балды, можно поставить что-то типа 1e-10

во-вторых, чтобы точность проседала меньше, лучше не накапливать ошибку через сложение double чисел, а

  1. сделать цикл по целым числам

     for (int i = 0; i < int(P / 0.1) + 1;  i ++)
    
  2. вычислять конкретный double для конкретного i

     const value_i = 0.1 * i;
    
READ ALSO
Программа не работает с кириллицей С++

Программа не работает с кириллицей С++

Делаю курсовой проект по теме поиска подстроки в строке с помощью алгоритма Бойера-Мура(Главная строка должна быть больше 255 символов)

194
Как настроить определение языка сайта?

Как настроить определение языка сайта?

Я нашла вот такой кодНо не понимаю, как реализовать для моего варианта

288
Как передать значения формы ajax запросом в php?

Как передать значения формы ajax запросом в php?

Не получается передать значения формы в php файлphp файл лежит в папке "/php/send

288
TokenMismatchException in compiled.php line 3314:

TokenMismatchException in compiled.php line 3314:

Добрый день возникла данная ошибка после ввода данных в поле на странице регистрации, вот ошибка https://istack

300