2012-04-21 2 views
3

Сегодня я наткнулся на эту проблему простой в Matlab:Числа меньше, чем realmin

>> 1/(10^309) 

ans = 

    0 

и все в порядке. Теперь я печатаю:

>> 0.0001/(10^308) 

ans = 

    9.999999999984653e-313 

и получить очень смущен. Не было наименьшего числа в Matlab realmin=2.225073858507201e-308? Почему вышеуказанный выход не дает 0?

ответ

3

В help realmin в нем говорится: «REALMIN Наименьшее положительное нормализованное число с плавающей запятой».

Нормализованное число с плавающей точкой не имеет начальных нулей в значении - так что-то вроде 1.123 * 10^-10. Если значение имеет начальные нули, например 0,0001 * 10^-10, то это denormal.

Я думаю, что eps(0) дает наименьшее денормальное число, доступное в Matlab.

5

realmin возвращает наименьший положительный нормализованный номер с плавающей запятой в двойной точности IEEE.

Есть меньше положительных чисел denormal с плавающей запятой. Посмотрите на «What Every Computer Scientist Should Know About Floating-Point Arithmetic».

Вас может заинтересовать eps, который возвращает наименьшее приращение между различными номерами.

Смежные вопросы