K
K
kr_ilya2021-04-09 22:03:26
Mathematics
kr_ilya, 2021-04-09 22:03:26

Calculating the value of sine in an infinite register machine (parallel)?

There is a task - to write a program for a parallel MBR that calculates the value of the " sex " function from (sinx +1) * 100
6070a1ac3dc30042460210.png
*sex function - rounding down to the nearest integer

Description of PMBR

6070a4640396f635782609.png
Работа ПМБР отличается от работы классической МБР тем, что у нее присутствует возможность параллельного выполнения заданных программ. То есть, в один и тот же момент времени могут выполняться разные команды. В связи с этим, система команд для МБР была расширена некоторыми новыми командами, такими как: запуск программы с последующим параллельным ее выполнением, запись в регистр значения с устройства ввода, запись значения регистра в устройство вывода, блокирование регистра с целью монопольного доступа к нему процессом-блокиратором, разблокировка регистра. Полный список команд для ПМБР имеет следующий синтаксис:

S(n) // Увеличение значения регистра n на 1
T(n, m) // Копирование значения регистра n в регистр m
Z(n) // Обнуление значения регистра n
J(n, m, k) // Условный переход. Если значения регистров m и n равны, то переход к команде с номером k
s(prog, n) /* Запуск программы prog в отдельном потоке и ассоциация её выполнения с регистром-индикатором n.
Перед началом выполнения программы регистр n обнуляется, после выполнения программы в него
заносится единица */
I(n) // Запись значения с устройства ввода с последующей записью его в регистр n
O(n) // Чтение значения регистра n и запись его в устройство вывода
G(n) // Блокировка регистра с номером n с целью монопольного обращения к нему процессом-блокиратором
P(n) // Разблокировка регистра с номером n и разрешение доступа к нему другим процессам

ПРИМЕР

unit Main // Объявление модуля. unit - ключевое слово, Main - название.

entry main // Объявление точки входа.
{
I(0) // Чтение числа в регистр 0
s(test1, 10) // Запуск программы test1 в параллельном процессе и сопоставление с ней регистра-индикатора с номером 10
s(test2, 11) // Запуск программы test2 в параллельном процессе и сопоставление с ней регистра-индикатора с номером 11
}

program test1 // Объявление программного блока
{
S(0) // Инкремент регистра 0
}

program test2
{
T(0, 1) // Копирование значения из регистра 0 в 1
S(1) // Инкремент значения в регистре 1
}



If you add one to the value of the sine and then multiply by 100 the matter of five minutes, then I cannot understand how to calculate the value of the sine itself. The catch is that registers can only contain positive integers, and the sine is defined on the interval [-1, 1]. I think that there is a simple solution without calculating the sine, but I have not been able to find it yet.

How can the task at hand be solved? I will be time for any advice and ideas of the algorithm.

MBR on github

Answer the question

In order to leave comments, you need to log in

1 answer(s)
H
hint000, 2021-04-10
@kr_ilya

how to calculate the sine value itself i can't understand
https://www.google.com/search?q=sin+power+series
https://ru.wikipedia.org/wiki/Taylor_Series
https://scask.ru/p_book_mat3.php?id=13
http:/ /www.math24.ru/expansion-of-functions-in-power...
registers can only contain positive integers, and sine is defined on the interval [-1, 1]
(sinx +1) *100 = 100*sinx + 100; you can calculate not sinx, but immediately 100 * sinx, it will be on the interval [-100, 100];
Hint: when calculating the sum of a series, you can immediately multiply each member of the series by 100.

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question