Я хотел бы иметь возможность извлекать значение и показатель числа с плавающей запятой в NumPy. Получение показателя степени в виде целого числа прекрасно и нормально для мантиссы. Получение мантиссы в виде битового поля было бы еще более удобным.
Я знаю, что поплавки Python имеют метод hex
; однако я хочу использовать numpy.float32
, массивы numpy и ufuncs. Я также знаю о методе numpy view
, который позволяет мне видеть число с плавающей запятой как целое число и, следовательно, как двоичную строку:
>>> import numpy as np
>>> b = bin(np.float32(1.23456789).view(np.int32))
'0b111111100111100000011001010010'
>>> b[-23:] # extract last 23 bits of IEEE 754 binary32 float, is significand
'00111100000011001010010'
Извлечение показателя степени и знака таким образом неудобно, так как начальные 0 отбрасываются на bin
. (Хотя я мог бы добавить 0 к 32 битам влево…)
В любом случае, поскольку bin
не является ufunc, это не удобно и мне пришлось бы перебирать массив.
Нет ли более удобного способа делать то, что я хочу?
numpy.frexp
. - person Mark Dickinson   schedule 07.09.2017numpy.frexp
дает a разложение на экспоненту и мантиссу, а не разложение на экспоненту и мантиссу, закодированную в IEEE 754 с плавающей запятой. (Показатель, заданныйfrexp
, отличается на единицу от показателя с плавающей запятой IEEE 754.) - person equaeghe   schedule 07.09.2017frexp
к разложению IEEE 754 тривиально. Как вы говорите, показатель степени отличается на единицу, поэтому вычтите единицу из показателя степени и удвойте мантиссу. - person Mark Dickinson   schedule 08.09.2017