2013-10-25 3 views
1

Это не большой вопрос, но мне очень любопытно, и я хотел бы знать, почему после операции типа «1.1 - 1» (1.1 как Single, 1 as Integer) результат равен 0.09999, а не 1 (1,1-1 = 0,1, естественно).Почему одна переменная дает 0.09999 вместо 0,1?

Я заменил целое число «1» на один «1,0», и он работает правильно.

Спасибо, и извините за мой английский.

А.

+1

Поиск «плавающего (или двойного) формата» и «поплавка (или двойная) потеря прецессии». Вы также можете использовать формат «decimal». – SJuan76

+2

Из-за точности с плавающей точкой (ограниченная). Прочитайте [это] (https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/02Numerics/Double/paper.pdf) – memo1288

+0

Спасибо за ваши ответы! –

ответ

1

Вы должны знать, как данные хранятся в памяти, сначала посмотрим на целых например, int, short, unsigned long long, они хранятся в памяти, и каждая конфигурация разных бит означает различный номер, поэтому его штраф, такая же ситуация с номерами float, разные конфигурации бит означают разное количество, поэтому давайте рассмотрим ограничения типов. Сравните int и float, оба из них представляют собой 32-разрядные номера. int предела –2147483648 to 2147483647 4294967296 разных значений, так как о float

#define FLT_MAX 3.402823466e+38F /* max value */ 
#define FLT_MIN 1.175494351e-38F /* min positive value */ 

Итак, как вы видите, диапазон гораздо шире, но количество различных значений одинаково, так что вы не можете иметь такую ​​хорошую точность, а также вы можете прочитать больше о float стандарт IEEE754 here или here

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