2017-02-09 4 views
-1

Выполнение этого кода дает те же точные цифры в обоих случаяхПочему точность float такая же, как у double?

double test = 0.5d; 
while (1d != 1d + test) { 
    Console.WriteLine(test); 
    test /= 2d; 
} 

Последняя строка вывода: 2,22044604925031E -16

float test2 = 0.5f; 
while (1f != 1f + test2) { 
    Console.WriteLine(test2); 
    test2 /= 2f; 
} 

Последняя строка вывода: 2,220446E -16

В соответствии с официальными документами MSDN (float и double) вывод теста на поплавок d были чем-то вроде 2,220446E -7. У меня есть концептуальное недоразумение или ошибка программирования?

+2

здесь точность число разрядов может быть сохранен после самой ценной цифры. точность не означает точность ее числа –

ответ

6

Концептуальные недоразумения. Прецизионность имеет тенденцию отображаться в количестве десятичных знаков, число после E равно экспоненту, в котором указывается, как большой или малый номер. Обратите внимание, что у float действительно есть намного меньше десятичных знаков, чем double!

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