Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для cristaloleg
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960

Стандартные мат. библиотеки в языках программирования

10.09.2010, 11:59. Показов 1182. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот к примеру возьмём python. В модуле math есть тригонометрические функции - например sin(x).
Как эта функция организована. Подробнее: у нас только гипотенуза константа и равна единице(как тригоном. окружность), а угол и катеты меняются от аргумента. Так как же функция вычисляет значения?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.09.2010, 11:59
Ответы с готовыми решениями:

Подключение библиотеки, написанной на VS в других языках программирования
Существует ли возможность написать на VS такую dll - библиотеку, которую можно было бы использовать на языках программирования без...

Какие стандартные библиотеки нужно изучать для программирования c++?
Посоветуйте, какие стандартные библиотеки нужно изучать для программирования c++, и где узнать вообще команды c++, а так же много ли их...

Графика в языках программирования
1. Изобразить движение маятника. 2. Изобразить пароход и закрасить его отдельные элементы различными цветами А) Составить процедуры ...

6
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
10.09.2010, 12:04
не знаю как в питоне, в си используется функция sin, которая вычисляется сопроцессором. А как уже вычисляет ее сопроцессор - скорее всего численно, раскладывая в ряд тейлора до некоторого конечного члена который определяет точность приближения
1
 Аватар для cristaloleg
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960
10.09.2010, 12:13  [ТС]
вот через ряды в вики
0
2014 / 1286 / 61
Регистрация: 05.06.2010
Сообщений: 2,213
10.09.2010, 13:12
посмотрел функцию sin в библиотеке math.h для AVR - там реализация програмная, без соопроцессора(ввиду его отсутствия)). Там синус действительно получают разложением в ряд тейлора, причем используются не так много членов как я думал :
C
1
2
3
4
5
g = y * y;
      /* Calculate the Taylor series. */
      R = (((r[3] * g + r[2]) * g + r[1]) * g + r[0]) * g;
      /* Finally, compute the result. */
      res = y + y * R
1
 Аватар для cristaloleg
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960
10.09.2010, 13:35  [ТС]
ну здесь стоит проблема в кол-ве членов ряда...чем больше тем точнее результат.
0
 Аватар для snake32
3511 / 1694 / 236
Регистрация: 26.02.2009
Сообщений: 8,471
Записей в блоге: 6
10.09.2010, 16:58
Может есть ещё заранее посчитаные таблицы? Тригонометрические ф-ии переодичные, а значит можно сделать таблицу с шагом например в 1 градус. Если аргумент ф-ии не целое число, то результат можно вычислить по линейной интерполяции между известными ячейками таблицы. Точность зависит от размера таблицы. Конечно к минусам такой системы можно смело отнести перерасход памяти, зато скорость по-идеи должна быть хорошая...
0
 Аватар для cristaloleg
149 / 50 / 3
Регистрация: 21.12.2008
Сообщений: 960
10.09.2010, 18:11  [ТС]
snake32, да не...слишком большие получились бы...
а вдруг я захочу двадцать знаков после запятой или больше..ну не думаю. ряд Тейлора прекрасно всё делает!

Добавлено через 56 минут
Вот я всё бьюсь над решением этой задачи. и у меня возникли проблемы:
Вот код.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import math
 
def P(n):
    """факториал"""
    res = 1
    for i in range(2, n+1):
        res = res * i
    return res
 
def make_sin(l):
    """создать ряд Тейлора. в виде строки и вставить в функция sin"""
    s =""
    plus = True
    i = 1
    while i < l:
        s = s + "x**" + str(i) + "/" + str(P(i))
        if plus == True:
            s = s + " + "
        else:
            s = s + " - "
        plus = not plus
        i = i + 2
    return s
 
def make_cos(l):
    """создать ряд Тейлора. в виде строки и вставить в функция cos"""
    s ="1 - "
    plus = True
    i = 2
    while i < l:
        s = s + "x**" + str(i) + "/" + str(P(i))
        if plus == True:
            s = s + " + "
        else:
            s = s + " - "
        plus = not plus
        i = i + 2
    return s
 
def sin(x):
    """мой sin"""
    res =  x**1/1 +  x**3/6 -  x**5/120 +  x**7/5040 -  x**9/362880 +  x**11/39916800 -  x**13/6227020800 +  x**15/1307674368000 -  x**17/355687428096000 +  x**19/121645100408832000 -  x**21/51090942171709440000 +  x**23/25852016738884976640000 -  x**25/15511210043330985984000000 +  x**27/10888869450418352160768000000 -  x**29/8841761993739701954543616000000 +  x**31/8222838654177922817725562880000000 -  x**33/8683317618811886495518194401280000000 +  x**35/10333147966386144929666651337523200000000 -  x**37/13763753091226345046315979581580902400000000 +  x**39/20397882081197443358640281739902897356800000000 -  x**41/33452526613163807108170062053440751665152000000000 +  x**43/60415263063373835637355132068513997507264512000000000 -  x**45/119622220865480194561963161495657715064383733760000000000 +  x**47/258623241511168180642964355153611979969197632389120000000000 -  x**49/608281864034267560872252163321295376887552831379210240000000000 +  x**51/1551118753287382280224243016469303211063259720016986112000000000000 -  x**53/4274883284060025564298013753389399649690343788366813724672000000000000 +  x**55/12696403353658275925965100847566516959580321051449436762275840000000000000 -  x**57/40526919504877216755680601905432322134980384796226602145184481280000000000000 +  x**59/138683118545689835737939019720389406345902876772687432540821294940160000000000000 -  x**61/507580213877224798800856812176625227226004528988036003099405939480985600000000000000 +  x**63/1982608315404440064116146708361898137544773690227268628106279599612729753600000000000000 -  x**65/8247650592082470666723170306785496252186258551345437492922123134388955774976000000000000000 +  x**67/36471110918188685288249859096605464427167635314049524593701628500267962436943872000000000000000 -  x**69/171122452428141311372468338881272839092270544893520369393648040923257279754140647424000000000000000 +  x**71/850478588567862317521167644239926010288584608120796235886430763388588680378079017697280000000000000000 -  x**73/4470115461512684340891257138125051110076800700282905015819080092370422104067183317016903680000000000000000 +  x**75/24809140811395398091946477116594033660926243886570122837795894512655842677572867409443815424000000000000000000 -  x**77/145183092028285869634070784086308284983740379224208358846781574688061991349156420080065207861248000000000000000000 +  x**79/894618213078297528685144171539831652069808216779571907213868063227837990693501860533361810841010176000000000000000000 -  x**81/5797126020747367985879734231578109105412357244731625958745865049716390179693892056256184534249745940480000000000000000000 +  x**83/39455239697206586511897471180120610571436503407643446275224357528369751562996629334879591940103770870906880000000000000000000 -  x**85/281710411438055027694947944226061159480056634330574206405101912752560026159795933451040286452340924018275123200000000000000000000 +  x**87/2107757298379527717213600518699389595229783738061356212322972511214654115727593174080683423236414793504734471782400000000000000000000 -  x**89/16507955160908461081216919262453619309839666236496541854913520707833171034378509739399912570787600662729080382999756800000000000000000000 +  x**91/135200152767840296255166568759495142147586866476906677791741734597153670771559994765685283954750449427751168336768008192000000000000000000000 -  x**93/1156772507081641574759205162306240436214753229576413535186142281213246807121467315215203289516844845303838996289387078090752000000000000000000000 +  x**95/10329978488239059262599702099394727095397746340117372869212250571234293987594703124871765375385424468563282236864226607350415360000000000000000000000 -  x**97/96192759682482119853328425949563698712343813919172976158104477319333745612481875498805879175589072651261284189679678167647067832320000000000000000000000 +  x**99/933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
    return res
 
def cos(x):
    """мой cos"""
    res = 1 - x**2/2 + x**4/24 - x**6/720 + x**8/40320 - x**10/3628800 + x**12/479001600 - x**14/87178291200 + x**16/20922789888000 - x**18/6402373705728000
    return res
 
def main():
    """test. первое значение моёю второе стандартное"""
    print(str(sin(0)) + " " + str(math.sin(0)))
    print(str(sin(math.pi / 6)) + " " + str(math.sin(math.pi / 6)))
    print(str(sin(math.pi / 4)) + " " + str(math.sin(math.pi / 4)))
    print(str(sin(math.pi / 3)) + " " + str(math.sin(math.pi / 3)))
    print(str(sin(math.pi / 2)) + " " + str(math.sin(math.pi / 2)))
    print(str(sin(math.pi)) + " " + str(math.sin(math.pi)))
    print(str(sin(3 * math.pi / 2)) + " " + str(math.sin(3 * math.pi / 2)))
    print(str(sin(math.pi * 2)) + " " + str(math.sin(math.pi * 2)))
 
    print()
    
    print(str(cos(0)) + " " + str(math.cos(0)))
    print(str(cos(math.pi / 6)) + " " + str(math.cos(math.pi / 6)))
    print(str(cos(math.pi / 4)) + " " + str(math.cos(math.pi / 4)))
    print(str(cos(math.pi / 3)) + " " + str(math.cos(math.pi / 3)))
    print(str(cos(math.pi / 2)) + " " + str(math.cos(math.pi / 2)))
    print(str(cos(math.pi)) + " " + str(math.cos(math.pi)))
    print(str(cos(3 * math.pi / 2)) + " " + str(math.cos(3 * math.pi / 2)))
    print(str(cos(math.pi * 2)) + " " + str(math.cos(math.pi * 2)))
 
main()
вот онлайн http://codepad.org/Yo6gl1KK

ответ получаю такой:
0 0.0
0.547197551197 0.5
0.863689545608 0.707106781187
1.22836969861 0.866025403784
2.14159265359 1.0
6.28318530718 1.22460635382e-16
10.4247779608 -1.0
12.5663706144 -2.44921270764e-16
()
1 1.0
0.866025403784 0.866025403784
0.707106781187 0.707106781187
0.5 0.5
-3.37692155225e-15 6.12303176911e-17
-1.00000000353 -1.0
-1.14329108194e-05 -1.83690953073e-16
0.996521389841 1.0
первое число моё. второе из стандартной библиотеки. почему после пи. значения не совпадают?
С чем это связано? увеличение членов ряда картину не изменяют(
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.09.2010, 18:11
Помогаю со студенческими работами здесь

Инструмент для программирования на языках C/C++
Здравствуйте. Начинаю изучение среды программирования C++. Подскажиет мне программку , которую лучше всего сказать, чтобы начать...

Написание программ на нескольких языках программирования
Написание программ на нескольких языках программирования - слышал, что так можно делать. А как? (Просто для интереса спросил.)

Лирика о студенческих годах и языках программирования
Fulcrum_013, Спасибо! В нашем универе нас особо и не учат, я в группе и еще один парень единственные кто понимает что-то, остальные понятия...

Как писать программу на нескольких языках программирования?
Что за прикол? Я в Википедии смотрю там разные популярные проги, а там написано по несколько языков программирования на которых они...

Концепция ООП и их использование в современных языках программирования
Дали курсовую на эту тему. Подскажите, какую литературу, которую можно бы было использовать пр написании. Спасибо. :з


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru