Форум сайта python.su
dimabestПрограммиста такие вещи вообще-то даже удивлять не должны. Не то, что беспокоить :)
Я писал программы на PHP, JavaScript и C#. В этих языках -17 степени программиста не беспокоят.
dimabestТеперь выяснилось, что вы и искать не умеете.
бггг, искал-искал и не нашел ничего кроме decimal из стандартной библиотеки Питона
Офлайн
В версии 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
Отредактировано (Март 11, 2009 11:57:28)
Офлайн
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 я не нашел. Может быть, тоже искать не умею?
Офлайн
То есть многие языки, если не большинство - считают по умолчанию так же, как и Python.
asv13на x86 всі мови себе так поводять а результати трішки відрізняються один від іншого напевно через те що вираховування результату відбувається через якусь кількість проміжних змінних.
Четыре диалекта 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
Офлайн
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'
Офлайн
Андрей СветловЕсли не сложно, поделитесь, пожалуйста: какие смотрели, что подразумеваете под хорошими, что для вас “быстро”?
И вот как раз быстрого хорошего decimal я не нашел.
Офлайн
Лутц не написал….Надо было начинать читать Лутца не с раздела по ООП :р
>>> 0.1+0.2-0.3
5.5511151231257827e-017
>>> "%2.2f" % (0.1+0.2-0.3)
'0.00'
Отредактировано (Март 11, 2009 20:27:43)
Офлайн
Хотел С extension (никак не Питон, стандартный decimal уже есть).
Внутреннее представление - конечного размера (32/64/128 бит). Бесконечные числа для меня интереса не представляют.
Быстро - это медленнее float (нет аппаратной поддержки), но сопоставимо с библиотеками эмуляции floating point.
Хорошее представление дает эта ссылка.
decNumber - хорошая спецификация и приличные реализации. Вот ее и хотел бы завернуть в Питон.
Офлайн
Какой у вас объем decimal-данных?
Кстати, а завернуть decNumber в DLL (.so) не пробовали?
Отредактировано (Март 11, 2009 21:52:48)
Офлайн