Найти - Пользователи
Полная версия: Как подружить типы float и Decimal в python'e?
Начало » Python для новичков » Как подружить типы float и Decimal в python'e?
1 2
eiyawii
Цель такова, что надо с максимальной точностью делать вычисления, сейчас программа использует типа данных float. Некоторые числа я перевел в Decimal и теперь при операциях умножения-деления возбуждается ошибка “unsupported type opetand for *,/”, видимо из-за того, что данные должны быть одного типа. Переводить всё в decimal не могу, так как там задан массив значений, или можно массив scipy.arange перевести в decimal?

И еще в догонку, задавая малое значение в list=sp.arange(0,1.8,0.000000001) получаю в ответ, что массив слишком большой (“array is too big”, если поменьше сделать, то memoryError) - можно ли это обойти как-нибудь? спасибо за внимание.
doza_and
У меня сложилось мнение что сложности которые у вас возникли в основном преодолеваются пересмотром алгоритма решения задачи. Можно посоветовать вам перейти на python 64 и купить побольше памяти и процессоров. Но думаю что если вы изложите суть задачи, можно будет предложить более простое решение.
label tea
Immense and wonderful effort by the admin i reflect you want more ideas share at the place..
And get more facts by read this site..
utah pool builders
Isem
doza_and
Флоаты в питоне 64 ни чем не отличаются от флоатов на питоне 32.
doza_and
Я про сверхдлинные массивы писал см второй абзац топикстартера
eiyawii
doza_and
У меня сложилось мнение что сложности которые у вас возникли в основном преодолеваются пересмотром алгоритма решения задачи. Можно посоветовать вам перейти на python 64 и купить побольше памяти и процессоров. Но думаю что если вы изложите суть задачи, можно будет предложить более простое решение.
думаю суть задачи мне не изложить, слишком специализированная и неинтересная) но точность расчетов очень важна. сейчас приведу простой пример, как можно получить такую ошибку, в которой надо как-то подружить decimal & float:
from decimal import \
Decimal as dec, getcontext

getcontext().prec=50

print dec(1)/7.0
eiyawii
собрался я с силами и перевел практически все переменные в decimal, но возникла другая подобная проблема - decimal и complex тоже не дружат :)
agalen
Нужно избегать мешать decimal и float/complex, если хочешь точность 50 знаков, т.к. float имеет точность 16 знаков.
Пример:
>>> dec( "1" )/dec( "%.50f" % 0.1 )
Decimal('9.9999999999999990000000000000000999999999999999900')
При необходимости, можно создать свой класс ComplexDecimal и определить для него все операции.
eiyawii
а можно ли как-то повысить точность float? установить большее число разрядов после запятой, 50, например?
doza_and
нет (Правда у Воеводина вроде была работа, когда во входных данных возмущались значения а результат оценивался как матожидание множественных расчетов, вроде получалась эффективная дополнительная точность :) )
может вам в рациональных числах считать? http://docs.python.org/library/fractions.html
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