spamsink: (Default)
[personal profile] spamsink
Задачка:

Имеется N-битный регистр clock, доступный для чтения и сброса в ноль (вариант - только для чтения), к которому каждые p/q секунд (p много меньше q, 2Np/q много больше единицы) по модулю 2N аппаратно прибавляется 1.

Имеется 32-битная переменная time, хранящая текущее время в секундах.

Требуется написать процедуру, которая вызывается сколь угодно часто, но не реже, чем 1 раз в (2N-1)p/q секунд с одним параметром, принимающим значение SET, что значит "в данный момент time содержит истинное время", или UPDATE, после которого time должна содержать значение времени, отличающееся в меньшую сторону от истинного менее чем на 1+p/q секунд. Процедура не должна содержать циклов и работы с плавающей точкой.

Upd: Если допустить работу с числами произвольной разрядности, то это несложно. Хотелось бы обойтись без длинного умножения/деления.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting
Page generated Mar. 5th, 2026 03:37 pm
Powered by Dreamwidth Studios