2014-12-02 1 views
0

Я нашел странные результаты в назначении поплавка в CPUошибка поплавка произошла в расчете CPU

Мой код

float W[0]=0.1; 
printf("%.10f",W[0]); 

В результате 0,1000000015

Может кто-нибудь дать мне помочь?

спасибо.

+0

Я думаю, вы получаете машину epsilon: http://en.wikipedia.org/wiki/Machine_epsilon – Marcs

+1

Итак, когда вы искали SO или более широкую сеть для терминов 'float inaccurate', разве вы не видели миллиард и одно сообщение _ уже уже детализирует то, что вы хотите знать? См. Http://powerfield-software.com/?p=30 для одного из них. – paxdiablo

+0

Используйте 'double', если вам нужны 10 точных десятичных цифр – mukunda

ответ

0

0,1 десятичный знак повторяется «bicimal»: 0.0 0011 0011 0011 0011 0011 0011 0011 ... (повторы 0011, которые я показал с пробелами). Закругленные до 24 значащих бит - чтобы поместиться в поплавок - это 0,000110011001100110011001101. То есть 0,100000001490116119384765625 in decimal. Число округлено до 10, десятичное число - 0,1000000015.

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