eiyawii
Ноя. 18, 2011 18:34:49
Цель такова, что надо с максимальной точностью делать вычисления, сейчас программа использует типа данных 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
Ноя. 18, 2011 19:36:50
У меня сложилось мнение что сложности которые у вас возникли в основном преодолеваются пересмотром алгоритма решения задачи. Можно посоветовать вам перейти на python 64 и купить побольше памяти и процессоров. Но думаю что если вы изложите суть задачи, можно будет предложить более простое решение.
label tea
Ноя. 19, 2011 00:24:01
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
Ноя. 19, 2011 06:32:41
doza_and
Флоаты в питоне 64 ни чем не отличаются от флоатов на питоне 32.
doza_and
Ноя. 19, 2011 07:40:43
Я про сверхдлинные массивы писал см второй абзац топикстартера
eiyawii
Ноя. 23, 2011 17:17:42
doza_and
У меня сложилось мнение что сложности которые у вас возникли в основном преодолеваются пересмотром алгоритма решения задачи. Можно посоветовать вам перейти на python 64 и купить побольше памяти и процессоров. Но думаю что если вы изложите суть задачи, можно будет предложить более простое решение.
думаю суть задачи мне не изложить, слишком специализированная и неинтересная) но точность расчетов очень важна. сейчас приведу простой пример, как можно получить такую ошибку, в которой надо как-то подружить decimal & float:
from decimal import \
Decimal as dec, getcontext
getcontext().prec=50
print dec(1)/7.0
eiyawii
Ноя. 23, 2011 17:22:12
собрался я с силами и перевел практически все переменные в decimal, но возникла другая подобная проблема - decimal и complex тоже не дружат :)
agalen
Ноя. 24, 2011 08:14:11
Нужно избегать мешать decimal и float/complex, если хочешь точность 50 знаков, т.к. float имеет точность 16 знаков.
Пример:
>>> dec( "1" )/dec( "%.50f" % 0.1 )
Decimal('9.9999999999999990000000000000000999999999999999900')
При необходимости, можно создать свой класс ComplexDecimal и определить для него все операции.
eiyawii
Ноя. 28, 2011 16:10:46
а можно ли как-то повысить точность float? установить большее число разрядов после запятой, 50, например?
doza_and
Ноя. 28, 2011 17:22:19
нет (Правда у Воеводина вроде была работа, когда во входных данных возмущались значения а результат оценивался как матожидание множественных расчетов, вроде получалась эффективная дополнительная точность :) )
может вам в рациональных числах считать?
http://docs.python.org/library/fractions.html