numpy.longdouble
относится к любому типу, который ваш компилятор C вызывает long double
.В настоящее время это только тип с плавающей точкой с расширенной точностью, который поддерживает numpy.
На x86-32 и x86-64 это 80-битный тип с плавающей точкой .В более экзотических системах это может быть что-то другое (IIRC на Sparc - это 128-битный IEEE-код с плавающей запятой, а на PPC - double-double ).(Это также может зависеть от того, какую ОС и компилятор вы используете - например, MSVC в Windows вообще не поддерживает какую-либо расширенную точность.)
Numpy также экспортирует некоторые имена, такие как numpy.float96
илиnumpy.float128
.Какое из этих имен экспортируется, зависит от вашей платформы / компилятора, но все, что вы получаете, всегда относится к тому же базовому типу, что и longdouble
.Кроме того, эти имена вводят в заблуждение.Они не указывают на 96- или 128-битный формат IEEE с плавающей запятой.Вместо этого они указывают количество бит выравнивания , используемых базовым типом long double
.Так, например, на x86-32, long double
равен 80 битам, но дополняется до 96 бит для поддержания 32-битного выравнивания, и numpy вызывает это float96
.На x86-64 long double
снова является идентичным 80-битным типом, но теперь он дополняется до 128 бит для поддержания 64-битного выравнивания, и numpy вызывает это float128
.Никакой дополнительной точности нет, просто дополнительные отступы.
Рекомендация: игнорируйте имена float96
/ float128
, просто используйте numpy.longdouble
.Или еще лучше придерживаться удвоений, если у вас нет действительно веских причин.Они будут быстрее, портативнее и т. Д.