Найти - Пользователи
Полная версия: сложение/вычитание вещественных чисел
Начало » Python для новичков » сложение/вычитание вещественных чисел
1 2 3
Lexander
dimabest
Я писал программы на PHP, JavaScript и C#. В этих языках -17 степени программиста не беспокоят.
Программиста такие вещи вообще-то даже удивлять не должны. Не то, что беспокоить :)
dimabest
бггг, искал-искал и не нашел ничего кроме decimal из стандартной библиотеки Питона
Теперь выяснилось, что вы и искать не умеете.

ЗЫ
Мда, куда катится мир…

ЗЫ2
Ну хоть повеселимся посреди недели :)
asv13
В версии 2.6 появился новый модуль http://docs.python.org/library/fractions.html Сделан на чистом питоне, думаю возможно подцепить его и в версии 2.5.

Подобный модуль fraction есть в либе mpmath http://code.google.com/p/mpmath

Еще есть CLNUM http://calcrpnpy.sourceforge.net/clnum.html

И SymPy -
>>> from sympy import *
>>> a = Rational(1,2)
>>> a
1/2
>>> a*2
1
По отзывам на форумах самый быстрый модуль - GMPY http://code.google.com/p/gmpy

“A C-coded Python extension module that wraps the GMP library to provide to Python code fast multiprecision arithmetic (integer, rational, and float), random number generation, advanced number-theoretical functions, and more.”
crchemist
dimabest
Я писал программы на PHP, JavaScript и C#. В этих языках -17 степени программиста не беспокоят.
<html>
<head>
<title>PHP Test</title>
<script>
window.alert('' + (0.1 + 0.2 - 0.3))
</script>
</head>

<body>
</body>
те саме що і в пітоні,
Андрей Светлов
fraction - штука хорошая, бесспорно. Вот только если считаем рубли и копейки - rational arithmetic не подходит, нужны fixed point decimals.
И вот как раз быстрого хорошего decimal я не нашел. Может быть, тоже искать не умею?
crchemist
То есть многие языки, если не большинство - считают по умолчанию так же, как и Python.
asv13
Четыре диалекта scheme - Ypsilon 0.9.6, Bigloo (3.1b), DrScheme 4.1.2, Gambit-C v4.3.2,
а также “J” 602a, REBOL, Factor, newlisp 10.0.2 - все выдали ответ 5.551115123125783e-17

CLISP 2.45 (- (+ 0.1 0.2) 0.3) = 0, но при этом (- (+ 0.1 0.4) 0.3) = 0.19999999

Отличился OpenLisp = -5.96046e-008
на x86 всі мови себе так поводять а результати трішки відрізняються один від іншого напевно через те що вираховування результату відбувається через якусь кількість проміжних змінних.
на ARM Python for Symbian видає правильний результат. Все залежить від процесора а не від мови.
asv13
crchemist
Так и есть, мои опыты это как раз показали. Языки очень разные, а результат один.

Андрей Светлов
Кроме cdecimal из песочницы, есть еще функции для обычного decimal в библиотеках

dmath http://code.google.com/p/dmath и
decimalfuncs http://pypi.python.org/pypi/decimalfuncs + еще либа AJDecimalMathAdditions

в основном добавили тригонометрические функции -
acos, asin, atan, atan2, ceil, cos, cosh, degrees, e, exp, floor, hypot, log, log10, pi, radians, sin, sinh, tan, and tanh

Насколько я понял вопрос со скоростью это не решает, особенно если эти функции и так не используются :)

Посмотрел на всякий случай GMPY
>>> import gmpy
>>> a = gmpy.mpf('0.1', 10)
>>> a
mpf('1.e-1')
>>> b = gmpy.mpf('0.2')
>>> c = gmpy.mpf('0.3')
>>> a + b - c
mpf('0.e0')
>>> gmpy.fdigits(a + b - c, 10, 0, 0, 1, 0)
'0.0'
>>> gmpy.fdigits(b - c, 10, 0, 0, 1, 0)
'-0.1'
похоже работает как и fraction - до decimal не дотягивает, нет поддержки NaN, inf и т.п.
Lexander
Андрей Светлов
И вот как раз быстрого хорошего decimal я не нашел.
Если не сложно, поделитесь, пожалуйста: какие смотрели, что подразумеваете под хорошими, что для вас “быстро”?
Psixo
Лутц не написал….
Надо было начинать читать Лутца не с раздела по ООП :р

>>> 0.1+0.2-0.3
5.5511151231257827e-017

>>> "%2.2f" % (0.1+0.2-0.3)
'0.00'
Если это требуется для вывода. Если для вычислений, то использовать соответствующие модули.
Андрей Светлов
Хотел С extension (никак не Питон, стандартный decimal уже есть).
Внутреннее представление - конечного размера (32/64/128 бит). Бесконечные числа для меня интереса не представляют.
Быстро - это медленнее float (нет аппаратной поддержки), но сопоставимо с библиотеками эмуляции floating point.
Хорошее представление дает эта ссылка.
decNumber - хорошая спецификация и приличные реализации. Вот ее и хотел бы завернуть в Питон.
Lexander
Какой у вас объем decimal-данных?

Кстати, а завернуть decNumber в DLL (.so) не пробовали?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB