Найти - Пользователи
Полная версия: Fixed point math
Начало » Python для новичков » Fixed point math
1
nJLyTo
Требуется считать большое кол-во синусов, косинусов и т.д. Сам впервые сталкиваюсь с этим, поэтому хотелось бы услышать мнение опытных людей.
Zubchick
услышать что? Как импортировать синус? Или как считать неподвижную точку? Вот у меня есть код на схиме по этому поводу 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))
а если серьезно, то все просто, в бесконечном цикле считаем функцию до заданного предела точности.
Ferroman
Не получается :(
>>> from __future__ import braces
SyntaxError: not a chance (<input>, line 2)
А вообще, поточнее бы вопрос.
boltayka
Попробую впервые здесь не спросить, а ответить на вопрос, так что ногами не бить :-)
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))
nJLyTo
Вопрос не в том, как посчитать синус, а какие средства есть в Питоне для представления чисел с фиксированной запятой. Возможно, есть модули, о наличии которых я не знаю, или приемы с учетом специфики самого Питона. Не забываем главного, что это должно работать быстрее (т.к. это один из способов оптимизации), чем операции над цифрами с плавающей точкой.

О приведении к fixed point вычитал на одном из сайтов, где для представления таких чисел используется тип long. Это нормально, если учитывать кол-во знаков после запятой. После первых попыток заметил, что скорость вычислений только упала (с числами типа int Питон оперирует быстрее). Опыта у меня не хватает, поэтому и подумал, что лучше не изобретать велосипед, а спросить на форуме… где некоторые товарищи мне советуют считать все в бесконечном цикле? =)
Андрей Светлов
Если вы собираетесь запускать ваш код на копьютере, а не специфическом устройстве вроде микроконтроллера без сопроцессора - используйте float (double для С). CPU сделает все быстрее.
Fixed point нужен там, где нет хорошей аппаратной поддержки floating point - или если вы считаете деньги.
mks
Для расчёта sin, cos, arctg еще используют CORDIC алгоритм, который легко реализуется на целочисленной арифметике. Это итерационный метод расчёта на основе формул поворота координат. Для его реализации нужно только суммирование и сдвиг. По памяти для точности <0.1 град. нужно около 12 итераций. А вообще все зависит от аппаратных возможностей платформы под которую вы пишете.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB