Задать вопрос
@romajke

Как избежать переполнения типа данных?

while ( x >= y)
{
//...
//code
//...
double x = a/b;
}

Проблема в том, что при делении a/b получается число с очень большим количеством знаков после запятой. И с каждой итерацией цикла количество знаков увеличивается. Мне же в принципе такая огромная точность не нужна, и вполне бы хватило 6-8 знаков после запятой. Можно ли как то избежать переполнения типа данных, например ограничив количество знаков после запятой при вычислениях? (это единственное что приходит мне в голову, но я не знаю возможно ли это) Или каким то другим способом?
  • Вопрос задан
  • 1765 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Skillbox
    Профессия Разработчик С++
 с нуля + ИИ
    7 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Никакого переполнения не будет. Переполнение возникает когда результат операции становится больше максимально допустимого значения для конкретного типа данных. Для типа double это 1.7976931348623157E+308.
Ответ написан
@MadridianFox
Web-программист, многостаночник
Точность вычислений вы устанавливаете выбирая тип данных - float или double. Не важно как сильно вы раздробили число, количество занимаемой им памяти не меняется. Т.е. вам нужно "обрезать" его только при выводе, чтобы лишние цифры глаза не мозолили.

Обрезание производлится по некоторым правилам, которые вы наверняка учили в школе, и называть это надо "округление". Т.е. вам достаточно набрать в гугле "Как округлить число до нужного знака после запятой в Си".

Переполнением в Си называется случай, когда вы увеличивая значение переменной достигаете предела и следующее увеличение обнуляет переменную или меняет её знак.
Ответ написан
Комментировать
@Gryphon88
Для сравнения двух float или double некорректно использовать x > y, рекомендуется писать x - y > eps, где eps - минимальное значимое различие, определены макросы FLT_EPSILON, DBL_EPSILON. Хорошая подробная серия статей про вычисления с плавающей точкой лежит тут.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Альфа-Банк Москва
от 200 000 до 350 000 ₽
Private-Team Санкт-Петербург
от 3 000 $
ИНКОР Москва
от 100 000 до 200 000 ₽