Форум сайта python.su
Цель такова, что надо с максимальной точностью делать вычисления, сейчас программа использует типа данных float. Некоторые числа я перевел в Decimal и теперь при операциях умножения-деления возбуждается ошибка “unsupported type opetand for *,/”, видимо из-за того, что данные должны быть одного типа. Переводить всё в decimal не могу, так как там задан массив значений, или можно массив scipy.arange перевести в decimal?
И еще в догонку, задавая малое значение в list=sp.arange(0,1.8,0.000000001) получаю в ответ, что массив слишком большой (“array is too big”, если поменьше сделать, то memoryError) - можно ли это обойти как-нибудь? спасибо за внимание.
Офлайн
У меня сложилось мнение что сложности которые у вас возникли в основном преодолеваются пересмотром алгоритма решения задачи. Можно посоветовать вам перейти на python 64 и купить побольше памяти и процессоров. Но думаю что если вы изложите суть задачи, можно будет предложить более простое решение.
Офлайн
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
Офлайн
doza_andФлоаты в питоне 64 ни чем не отличаются от флоатов на питоне 32.
Офлайн
Я про сверхдлинные массивы писал см второй абзац топикстартера
Отредактировано (Ноя. 19, 2011 07:41:18)
Офлайн
doza_andдумаю суть задачи мне не изложить, слишком специализированная и неинтересная) но точность расчетов очень важна. сейчас приведу простой пример, как можно получить такую ошибку, в которой надо как-то подружить decimal & float:
У меня сложилось мнение что сложности которые у вас возникли в основном преодолеваются пересмотром алгоритма решения задачи. Можно посоветовать вам перейти на python 64 и купить побольше памяти и процессоров. Но думаю что если вы изложите суть задачи, можно будет предложить более простое решение.
from decimal import \
Decimal as dec, getcontext
getcontext().prec=50
print dec(1)/7.0
Офлайн
собрался я с силами и перевел практически все переменные в decimal, но возникла другая подобная проблема - decimal и complex тоже не дружат :)
Офлайн
Нужно избегать мешать decimal и float/complex, если хочешь точность 50 знаков, т.к. float имеет точность 16 знаков.
Пример:
>>> dec( "1" )/dec( "%.50f" % 0.1 )
Decimal('9.9999999999999990000000000000000999999999999999900')
Офлайн
а можно ли как-то повысить точность float? установить большее число разрядов после запятой, 50, например?
Офлайн
нет (Правда у Воеводина вроде была работа, когда во входных данных возмущались значения а результат оценивался как матожидание множественных расчетов, вроде получалась эффективная дополнительная точность :) )
может вам в рациональных числах считать? http://docs.python.org/library/fractions.html
Отредактировано (Ноя. 28, 2011 17:25:30)
Офлайн