Nikulio
@Nikulio
NaN !== NaN

Почему числа в JS такие странные?

Привет
Читаю книгу по js,и там крутые домашние задания
Но как я понял.у дроби 0.2  при 0.2.toFixed(20) будет 0.200000000000120123(число взято с головы.что бы показать этот остаток)
Почему так?
  • Вопрос задан
  • 301 просмотр
Пригласить эксперта
Ответы на вопрос 2
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Javascript просто следует стандарту.

Squeezing infinitely many real numbers into a finite number of bits requires an approximate representation. Although there are infinitely many integers, in most programs the result of integer computations can be stored in 32 bits. In contrast, given any fixed number of bits, most calculations with real numbers will produce quantities that cannot be exactly represented using that many bits. Therefore the result of a floating-point calculation must often be rounded in order to fit back into its finite representation.

What Every Computer Scientist Should Know About Fl...

P.S. Это вы еще 0,1 и 0,2 не складывали.
Ответ написан
AntiStream
@AntiStream
Потоковый программист
Это информатику надо учить, чтобы понять. Числа с запятой хранится в типах данных в 32 и 64 бита (float и double), и у этих типов данные есть соответственно 2^32 и 2^64 возможных состояний. В целых числах у каждого значения есть чёткое состояние. В плавающих числах эти состояния те же самые, что и в целых, но просто они как бы растянуты по алгебраическому представлению, из-за чего и страдает точность. Для примера, если в консоли сделать 1e128+1, то получите всё тоже 1e128 потому, как нету в типе данных такого состояния, которое могло хотя бы округлённо представлять 1e128+1. Даже более того -- если сделать 1e128+1e111, то этого тоже будет не достаточно для изменения состояния 1e128, но при уже 1e128+1e112 получится изменённое состояние : 1.0000000000000003e+128 Компьютер считает не арифметическими числами, а матричными состояниями битов информации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы