Подтвердить что ты не робот

Правильный способ эмулировать одинаковую точку с плавающей запятой в python?

Какой лучший способ эмулировать плавную точку с одной точностью в python? (Или другие форматы с плавающей запятой, если на то пошло?) Просто используйте ctypes?

4b9b3361

Ответ 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-битными поплавками, вам необходимо применить эту операцию усечения к результату каждой арифметической операции.