Какой лучший способ эмулировать плавную точку с одной точностью в python? (Или другие форматы с плавающей запятой, если на то пошло?) Просто используйте ctypes?
Правильный способ эмулировать одинаковую точку с плавающей запятой в python?
Ответ 1
Ответ 2
Если numpy
(отличное предложение других ответов) неприменимо для вас (например, потому что вы находитесь в среде, которая не позволяет произвольные сторонние расширения), array в стандартной библиотеке Python тоже отлично - код типа 'f'
дает вам 32-битные поплавки. Помимо тех, и (обычных) двойных прецизионных поплавков, не так много для "других форматов с плавающей запятой" - что вы имели в виду? (например, gmpy
предлагает скромную поддержку GMP для поплавков с гораздо более длинными произвольными размерами бит, но это действительно скромно, например, никаких триггерных функций).
Ответ 3
как насчет ctypes.c_float из стандартной библиотеки?
Ответ 4
Если ваше приложение подходит для массивов/матриц, вы можете использовать numpy с float32
Ответ 5
Можно использовать модуль Python struct
для усечения 64-битного поплавка с точностью до 32-битного float.
Например:
>>> x = 1.1122334455667788
>>> x
1.1122334455667788
>>> struct.unpack('f', struct.pack('f', x))[0]
1.1122334003448486
Чтобы выполнить арифметику только с 32-битными поплавками, вам необходимо применить эту операцию усечения к результату каждой арифметической операции.