Какова внутренняя точность numpy.float128?

Какая точность делает numpy.float128 для внутренней? Это __float128 или длинный двойной? (или что-то еще !?)

Потенциал следует за вопросом, если кто-нибудь знает: безопасно ли в C выпустить __float128 на удвоение (16 байт), только с потерей точности? (это для взаимодействия с C lib, который работает с длинными удвоениями).

  • Арифметика высокой точности в Python и / или C / C ++?
  • Я хочу изучить развитие игры. На каком языке я должен пользоваться?
  • c ++ back end вызывает уровни обратного вызова, определенные на уровне python, с помощью обертки swig
  • Как написать простое приложение Bittorrent?
  • Как импортировать модуль caffe в Python?
  • Скомпилировать интерпретатор Python статически?
  • Изменить: в ответ на комментарий платформа «Linux-3.0.0-14-generic-x86_64-with-Ubuntu-11.10-oneiric». Теперь, если numpy.float128 имеет различную точность, зависящую от платформы, это также полезно для меня!

    Чтобы быть ясным, именно меня интересует точность , а не размер элемента.

  • Pandas читает dataframe из csv с индексом как string, а не int
  • Умножение в массив numpy
  • Как вернуть все минимальные индексы в numpy
  • Как сделать диаграмму matplotlib / pandas гистограммой?
  • Как сохранить ориентацию строк и столбцов векторов в numpy?
  • Случайно выберите случайный выбор для создания 2D-массива со всеми уникальными значениями
  • 2 Solutions collect form web for “Какова внутренняя точность numpy.float128?”

    Очень рекомендуется использовать longdouble вместо float128 , так как это довольно беспорядок , ATM. Python будет использовать его для float64 во время инициализации.

    Внутри numpy это может быть двойной или длинный двойной. Он определен в npy_common.h и зависит от вашей платформы. Я не знаю, можете ли вы включить его из коробки в исходный код.

    Если вам не нужна производительность в этой части вашего алгоритма, более безопасным способом было бы экспортировать его в строку и впоследствии использовать strold .

    numpy.longdouble ссылается на любой тип, который ваш компилятор C вызывает long double . В настоящее время это единственный расширенный тип с плавающей запятой, поддерживаемый numpy.

    На x86-32 и x86-64 это 80-битный тип с плавающей запятой . В более экзотических системах это может быть что-то другое (IIRC на Sparc – это реальный 128-битный IEEE-флоат, а на PPC – двойной-двойной ). (Это также может зависеть от того, какую ОС и компилятор вы используете – например, 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 . Или еще лучше придерживаться двойников, если у вас нет поистине убедительной причины. Они будут быстрее, портативнее и т. Д.

    Python - лучший язык программирования в мире.