#python #numpy #floating-point #precision
#python #numpy #с плавающей запятой #точность
Вопрос:
Я испытываю странное поведение при преобразовании скаляра или массива в numpy.float32. Я подозреваю, что это связано с пределом точности, но не могу точно определить, откуда это происходит. Вот пример со скаляром в IPython, но я испытал то же самое с массивами в скрипте, запущенном из командной строки:
In[25]: import numpy as np
In[26]: a=58289.16666
In[27]: a
Out[27]: 58289.16666
In[28]: b=np.float32(a)
In[29]: b
Out[29]: 58289.168
Если я сохраню ту же десятичную точность, но уменьшу общее количество значащих цифр, например, на a = 5828.16666, то я получу еще 1 цифру точности, т. Е. b = 5828.1665.
Есть какие-либо подсказки, что происходит и как сохранить исходную точность при выполнении этого преобразования?
Спасибо за ваши ответы!
Комментарии:
1. Собственный элемент с плавающей точкой в Python — это double, ‘float64’. ‘float32’ имеет всего 4 байта и не может хранить столько цифр.
2. Почему вы вообще хотите выполнить преобразование? Вы можете свободно использовать
a
в numpy повсюду, и в его распоряжении будет 8 байт.3. Предполагая, что IEEE754 32 бит для float, он имеет 24 бита эффективного значения, что эквивалентно примерно 7 десятичным разрядам. Почему вы используете float?
4. «как сохранить исходную точность при выполнении этого преобразования». Есть простой ответ: вы не можете. Вы запрашиваете что-то, что является явно уменьшающей точность операцией, чтобы сохранить ту же точность, и это не делает этого. Какую реальную проблему вы пытаетесь здесь решить? Почему вы делаете
np.float32
преобразование в первую очередь — какую проблему оно решает?