Уведомления

Группа в Telegram: @pythonsu

#1 Март 4, 2010 19:28:59

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Fixed point math

Требуется считать большое кол-во синусов, косинусов и т.д. Сам впервые сталкиваюсь с этим, поэтому хотелось бы услышать мнение опытных людей.



Офлайн

#2 Март 4, 2010 19:59:26

Zubchick
От:
Зарегистрирован: 2009-07-08
Сообщения: 613
Репутация: +  0  -
Профиль   Отправить e-mail  

Fixed point math

услышать что? Как импортировать синус? Или как считать неподвижную точку? Вот у меня есть код на схиме по этому поводу xD

(define tolerance 0.00001)

(define (fixed-point f first-guess) ; f - функция
(define (close-enough? v1 v2)
(< (abs (- v1 v2)) tolerance))
(define (try guess)
(let ((next (f guess)))
(if (close-enough? guess next)
next
(try next))))
(try first-guess))
а если серьезно, то все просто, в бесконечном цикле считаем функцию до заданного предела точности.



Отредактировано (Март 4, 2010 20:03:51)

Офлайн

#3 Март 5, 2010 00:48:38

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

Fixed point math

Не получается :(

>>> from __future__ import braces
SyntaxError: not a chance (<input>, line 2)
А вообще, поточнее бы вопрос.

Офлайн

#4 Март 5, 2010 05:56:17

boltayka
От:
Зарегистрирован: 2009-10-07
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Fixed point math

Попробую впервые здесь не спросить, а ответить на вопрос, так что ногами не бить :-)

from math import sin, cos
for i in range(1, 100):
print 'number: '+str(i)
print 'sinus: '+str(sin(i))
print 'cosinus: '+str(cos(i))

Отредактировано (Март 5, 2010 13:43:59)

Офлайн

#5 Март 5, 2010 09:44:49

nJLyTo
От:
Зарегистрирован: 2008-11-11
Сообщения: 60
Репутация: +  0  -
Профиль   Отправить e-mail  

Fixed point math

Вопрос не в том, как посчитать синус, а какие средства есть в Питоне для представления чисел с фиксированной запятой. Возможно, есть модули, о наличии которых я не знаю, или приемы с учетом специфики самого Питона. Не забываем главного, что это должно работать быстрее (т.к. это один из способов оптимизации), чем операции над цифрами с плавающей точкой.

О приведении к fixed point вычитал на одном из сайтов, где для представления таких чисел используется тип long. Это нормально, если учитывать кол-во знаков после запятой. После первых попыток заметил, что скорость вычислений только упала (с числами типа int Питон оперирует быстрее). Опыта у меня не хватает, поэтому и подумал, что лучше не изобретать велосипед, а спросить на форуме… где некоторые товарищи мне советуют считать все в бесконечном цикле? =)



Отредактировано (Март 5, 2010 09:47:48)

Офлайн

#6 Март 5, 2010 10:04:57

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Fixed point math

Если вы собираетесь запускать ваш код на копьютере, а не специфическом устройстве вроде микроконтроллера без сопроцессора - используйте float (double для С). CPU сделает все быстрее.
Fixed point нужен там, где нет хорошей аппаратной поддержки floating point - или если вы считаете деньги.



Офлайн

#7 Март 5, 2010 11:49:49

mks
От:
Зарегистрирован: 2009-08-07
Сообщения: 80
Репутация: +  5  -
Профиль   Отправить e-mail  

Fixed point math

Для расчёта sin, cos, arctg еще используют CORDIC алгоритм, который легко реализуется на целочисленной арифметике. Это итерационный метод расчёта на основе формул поворота координат. Для его реализации нужно только суммирование и сдвиг. По памяти для точности <0.1 град. нужно около 12 итераций. А вообще все зависит от аппаратных возможностей платформы под которую вы пишете.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version