Есть переменная типа double. Каждый раз её увеличивают на 0.01. Будет ли переполнение?
С точки зрения теории формата IEEE-754 переполнение при последовательном увеличении числа типа double
может наступить только в одном случае: когда операция сложения выполняется с округлением в сторону плюс бесконечности (если исходное число НЕ было бесконечностью). В процессоре по-умолчанию установлен другой флаг округления (nearest-to-even), по какой причине вы никогда не доберётесь до бесконечности, так как, начиная с какого-то момента, прибавление 0,01
перестанет увеличивать вашу переменную.
Происходит это потому, что формат с плавающей запятой хранит только самые старшие биты числа. Представьте себе, что (работаем в десятичной системе), у вас в памяти могут храниться только 3 цифры числа. То есть вместо 12345
вы можете хранить только 123 * 10^2
. Тогда попробуйте прибавить число 1
Если бы вы могли хранить все 5 цифр, получили бы 12346
, но ведь это то же самое, что и было: 123 * 10^2
. Ваше прибавление 1
ничего не поменяло, потому что вы уже потеряли последние две цифры из-за ограничений памяти самого формата.
Подробнее об этом можно почитать в статье, где разбирается пример "игрушечного" формата на подобии IEEE-754 и показано как при прибавлении к большому числу маленького первое не меняется.
Ответ на ваш вопрос: НЕТ.
Естественно, мой ответ справедлив для машинной реализации плавающей арифметики в формате IEEE-754, есть много других форматов, там ситуация может быть иной.
Нет.
#include <iostream>
using namespace std;
int main()
{
double v=1000000000000.0*10000000000000.0;
cout<<((v!=v+0.01) ? "Yes" : "No");
return 0;
}
В какой-то момент просто прибавления не будет.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
У меня в phpMyAdmin вместо русских букв в таблице отображаются знаки вопросаЯ понимаю, что это проблемы с кодировкой, но не могу перекодировать...
Можете пожалуйста помочь, напишите что у меня не такЯ хочу что бы статьи были слева, а комментарии справа, но ничего не работает
Помогите пожалуйстаУ меня есть одна проблема, мне нужно сохранить результаты работы в программе в виде скриншота в папку, где находиться...