Я боюсь пользоваться вещественными числами, т. к я узнал что не все дроби десятичной системы можно представить в двоичной.
.
Даже дробь 0.1 не имеет двоичного представления. И что тогда происходит, когда я в ЯП объявляю переменную float и присваиваю ей 0.1???
Другие языки программирования и технологии
Вещественные числа и языки программирования
Присваивается значение, ПРИМЕРНО равное 0.1 - 0.10000000149
Если использовать не float (32 бита), а double (64 бита), ошибка уменьшается: 0.10000000000000000555
Раздел математики, занимающийся минимизацией ошибок вычислений, называется "вычислительная математика" и изучается в любом техническом ВУЗе.
Если использовать не float (32 бита), а double (64 бита), ошибка уменьшается: 0.10000000000000000555
Раздел математики, занимающийся минимизацией ошибок вычислений, называется "вычислительная математика" и изучается в любом техническом ВУЗе.
А ты не бойся. Все равно вычисления всегда (!) производятся с некоторой конечной точностью, как правило, у чисел с плавающей точкой она даже избыточна. Просто выводи результат с нужной точностью и он округлится как надо.
Избегать нужно только каких-то системных накоплений ошибок, например, если триллион раз сложить 0.1, то 100 миллиардов можно и не получить. Ну так не суммируй столько раз одинаковые числа, пользуйся умножением...
>И что тогда происходит, когда я в ЯП объявляю переменную float и присваиваю ей 0.1???
По большому счету, тебя это не должно волновать. Если ты присвоил 0.1, значит, точность твоих вычислений - 1 знак после запятой. Используй форматированный вывод для вывода результата (или той же переменной) с 1 знаком после запятой и получишь верный ответ.
Избегать нужно только каких-то системных накоплений ошибок, например, если триллион раз сложить 0.1, то 100 миллиардов можно и не получить. Ну так не суммируй столько раз одинаковые числа, пользуйся умножением...
>И что тогда происходит, когда я в ЯП объявляю переменную float и присваиваю ей 0.1???
По большому счету, тебя это не должно волновать. Если ты присвоил 0.1, значит, точность твоих вычислений - 1 знак после запятой. Используй форматированный вывод для вывода результата (или той же переменной) с 1 знаком после запятой и получишь верный ответ.
Надо не бояться, а учитывать. Это часть вычислительной математики, которую программист знать обязан. Программирование - отнюдь не только знание языка программирования.
Оно будет округлено. Но есть тип данных в десятичном представлении. Считать им дольше, но идеален для подсчёта денег и так далее.
0,1(10) имеет, естественно, двоичное представление как бесконечная периодическая дробь. А то, что в ЭВМ обычно двоичная запись вещественных чисел усекается в зависимости от разрядности представления и типа данных, то это вообще ерунда! Супер-точные вычисления нужны в основном только математикам для проверки некоторых определённых алгоритмов, а для большинства нужд практики вполне достаточно и точности представления 4-, 6-, 8-, 10- или максимум 16-байтных вещественных чисел.
Похожие вопросы
- Почему числа в языках программирования называются константами?
- Как написать программу, которая будет представлять вещественное число в памяти компьютера
- Представить заданные вещественные числа А и В в формате с плавающей точкой.
- А какие языки программирования изучали в 80х и на чём вы их изучали?
- Разработайте программу на любом доступном языке программирования вычисляющую наименьшее общее кратное двух чисел...
- Какой язык программирования выбрать для изучения для начинающего ? (внутри)
- С какого языка программирования начать?
- Как срандомить случайные вещественные числа N и занести их в массив? C++
- Какой язык программирования следует изучить в первую очередь, если в программировании вообще ничего не понимаешь?
- И снова про языки программирования ^_^ Поправьте, если я ошибаюсь где-то.