для зачета по информатике препод задал вопрос
типа почему если я в программе буду задавать точность вычислений с большим чем 16 количество цифр после запятой, то компьютер будет округлять? почему именно 16?
Другие языки программирования и технологии
Вопрос по информатике. Почему точность вычислений в С определяется только 16 знаком после запятой и почему именно 16?
Си в этой "точности" совершенно ни при чём. Речь идёт о представлении вещественных чисел двойной точности в сопроцессоре от Intel.
53 - это разрядность двоичной нормализованной мантиссы, что обеспечивает точность в десятичном представлении 15-16 десятичных разрядов
тип double имеет распределение знак, порядок, дробная часть мантиссы: 1+11+52=64 бита
поэтому нормализованная мантисса имеет 2^(52+1) двоичных вариантов представления значения вещественного числа
lg(2^(52+1))=15,9546 что почти равно 16, но не равно!
А это значит, что гарантированно азличить можно только 15 десятичных цифр, а не 16!
53 - это разрядность двоичной нормализованной мантиссы, что обеспечивает точность в десятичном представлении 15-16 десятичных разрядов
тип double имеет распределение знак, порядок, дробная часть мантиссы: 1+11+52=64 бита
поэтому нормализованная мантисса имеет 2^(52+1) двоичных вариантов представления значения вещественного числа
lg(2^(52+1))=15,9546 что почти равно 16, но не равно!
А это значит, что гарантированно азличить можно только 15 десятичных цифр, а не 16!
Ну тебе почти ответили, особенно про 15 значащих.
Из своего опыта нарывания на эту жопу могу сказать, что никогда не используй тип float - целее будешь, так как даже 7 значащих цифр не хватает при многократных операциях.
И про сравнение таких чесел тоже толково сказали http://www.mql5.com/ru/docs/basis/types/double
так как "Необходимо помнить, что вещественные числа хранятся в памяти компьютера с некоторой ограниченной точностью в двоичной системе счисления, в то время как общепринятой в использовании является десятичная система счисления. Поэтому многие числа, которые точно записываются в десятичной системе, в двоичной системе можно записать только в виде бесконечной дроби.
Например, числа 0.3 и 0.7 представлены в компьютере бесконечными дробями, в то время как число 0.25 хранится точно, так как представляет из себя степень двойки.
В связи с этим, категорически не рекомендуется сравнивать между собой два вещественных числа на равенство, так как такое сравнение не является корректным. "
Из своего опыта нарывания на эту жопу могу сказать, что никогда не используй тип float - целее будешь, так как даже 7 значащих цифр не хватает при многократных операциях.
И про сравнение таких чесел тоже толково сказали http://www.mql5.com/ru/docs/basis/types/double
так как "Необходимо помнить, что вещественные числа хранятся в памяти компьютера с некоторой ограниченной точностью в двоичной системе счисления, в то время как общепринятой в использовании является десятичная система счисления. Поэтому многие числа, которые точно записываются в десятичной системе, в двоичной системе можно записать только в виде бесконечной дроби.
Например, числа 0.3 и 0.7 представлены в компьютере бесконечными дробями, в то время как число 0.25 хранится точно, так как представляет из себя степень двойки.
В связи с этим, категорически не рекомендуется сравнивать между собой два вещественных числа на равенство, так как такое сравнение не является корректным. "
эм.... ты же про float говоришь, да?
Потому что мантисса ограничена 53 разрядами. 1/(2^-53) =1,1102230246251565404236316680908e-16
В IEEE 754 double занимает 52 разряда за счет отбрасывания старшей 1,которая всегда равна 1, поэтому в моей формуле выше 53.
В IEEE 754 double занимает 52 разряда за счет отбрасывания старшей 1,которая всегда равна 1, поэтому в моей формуле выше 53.
Похожие вопросы
- Узнать сколько знаков после запятой в числе? Visual Basic
- Какая функция определяет количество знаков после запятой переменной double?
- Помогите пожалуйста разобраться с вопросами по информатике и программированию
- Вопросы по информатике
- Вопросы по информатике, срочно!!!
- Люди помогите. Ответте кратко на вопрос по информатике. Ничего нигде не нашла. В информатике полный 0!
- Я выучил первые 1000 знаков после запятой числа Пи. Я великий и всемогущий?
- Как в паскале убрать у числа определенно количество знаков после запятой?
- Ответьте пожалуйста на несколько вопросов по информатике связанных с Visual basic 6.0
- подскажите пожалуйста....ответы на вопросы по информатике (вопрос внутри)