OlDer
Ноя. 7, 2007 07:05:52
Мне нужно извлечь квадратный корень из числа без использования модуля math.
Существует ли алгоритм который использует только умножение, сложение и вычитание? Т.к. хотелось бы использовать его с вот этим модулем:
http://www.pythoncraft.com/Decimal.py А там другие операции не реализованы ;)
Нужно это для вот такого устройства:
http://www.telit.com/en/products/python.php Там python 1.5.2 и нету почти ничего из стандартной библиотеки.
multik
Ноя. 7, 2007 09:16:07
первое что приходит на ум – разложить в ряд тэйлора до требуемой точности. если я не ошибаюсь, так практически везде и сделано.
в принципе, еще можно дихотомию пускать. сходимость логарифмическая. но все-таки это уже из разряда извращений.
j2a
Ноя. 7, 2007 13:53:58
Угу. Тот код, который на gamedev, AFAIR, id Software использовал :)
shiza
Ноя. 7, 2007 13:55:10
В питоне 2.5 в модуле decimal - есть вычисление корня.
На питоне - 100 строк, поэтому даю ссылку на модуль.
Функция называется sqrt =)
http://svn.python.org/view/python/trunk/Lib/decimal.py?rev=58550&view=markupЯ думаю ее надо немного подправить - чтоб совместить с 1.5.2.
shiza
Ноя. 7, 2007 14:03:03
хотя… я бы поступил по другому.
перевел бы decimal во float, и сделал
pow(x, 0.5)
это побыстрее будет чем столбиком или по ньютону считать ;)
p.s. pow - встроенная в 1.5.2 питон функция
OlDer
Ноя. 9, 2007 06:14:17
shiza
перевел бы decimal во float, и сделал
К сожалению, там нету float…
setoy
Ноя. 14, 2007 11:05:09
Я работал на телитских модули год назад. По моему встроений интерпретатор весьма бесполезней, недомыслие какое-то :) По моему лучше тебе будет сделать все математики,низкоуровневых и time-critical операций на внешний контролер, ползую только файловая система… но сделать надеждной протокол для связь по UART-a тоже невозможно, потому что телитский питон будет считать простой XOR каждого 64-байтово пакета для какие там 0.5-0.6 секунд:) для CRC :)
Если нет выбора и если обхват аргумента позволяет, лучше всего будет запихать все в словарь :)
_sqrt={1:1,2:1,4:2…..}