Javascript Float32Array странности - PullRequest
0 голосов
/ 17 декабря 2011

Если я запускаю этот код:

var a = new Float32Array(3);
a[0] = 1;
a[1] = 1.1;
a[2] = 1.00001;

Я получаю этот результат для a:

[1, 1.100000023841858, 1.0000100135803223]

Почему Float32Array винт с моими номерами так? Кроме того, как мне узнать, какие числа могут быть точно представлены как 32-разрядные числа с плавающей запятой?

1 Ответ

3 голосов
/ 17 декабря 2011

32-битное число с плавающей запятой имеет только 7 значащих цифр.Это нормально для числа с плавающей запятой, которое будет сохранено как самое близкое возможное приближение определенного числа.

32-разрядное число с плавающей запятой просто не может точно сохранить значение 1.1, самое близкое значение, которое оно можетstore = 1.100000023841858.

Для семи значащих цифр число все еще является точным, т.е. 1.100000.

Обычно, когда отображается число с плавающей запятой, оно округляется в соответствии с числомзначащих цифр, которые он может точно хранить.То, что вы используете для отображения чисел, очевидно, не делает этого округления, поэтому вы видите ограничения в точности чисел.

Предполагая, что эти 32-разрядные числа с плавающей запятой используют IIIE 754 стандартно, они могут представлять значения в диапазоне от 1,18 * 10 -38 до 3,4 * 10 38 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...