Форум сайта python.su
Требуется считать большое кол-во синусов, косинусов и т.д. Сам впервые сталкиваюсь с этим, поэтому хотелось бы услышать мнение опытных людей.
Офлайн
услышать что? Как импортировать синус? Или как считать неподвижную точку? Вот у меня есть код на схиме по этому поводу 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)
Офлайн
Не получается :(
>>> from __future__ import braces
SyntaxError: not a chance (<input>, line 2)
Офлайн
Попробую впервые здесь не спросить, а ответить на вопрос, так что ногами не бить :-)
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)
Офлайн
Вопрос не в том, как посчитать синус, а какие средства есть в Питоне для представления чисел с фиксированной запятой. Возможно, есть модули, о наличии которых я не знаю, или приемы с учетом специфики самого Питона. Не забываем главного, что это должно работать быстрее (т.к. это один из способов оптимизации), чем операции над цифрами с плавающей точкой.
О приведении к fixed point вычитал на одном из сайтов, где для представления таких чисел используется тип long. Это нормально, если учитывать кол-во знаков после запятой. После первых попыток заметил, что скорость вычислений только упала (с числами типа int Питон оперирует быстрее). Опыта у меня не хватает, поэтому и подумал, что лучше не изобретать велосипед, а спросить на форуме… где некоторые товарищи мне советуют считать все в бесконечном цикле? =)
Отредактировано (Март 5, 2010 09:47:48)
Офлайн
Если вы собираетесь запускать ваш код на копьютере, а не специфическом устройстве вроде микроконтроллера без сопроцессора - используйте float (double для С). CPU сделает все быстрее.
Fixed point нужен там, где нет хорошей аппаратной поддержки floating point - или если вы считаете деньги.
Офлайн
Для расчёта sin, cos, arctg еще используют CORDIC алгоритм, который легко реализуется на целочисленной арифметике. Это итерационный метод расчёта на основе формул поворота координат. Для его реализации нужно только суммирование и сдвиг. По памяти для точности <0.1 град. нужно около 12 итераций. А вообще все зависит от аппаратных возможностей платформы под которую вы пишете.
Офлайн