1word.h(3)                  Library Functions Manual                  word.h(3)
2
3
4

NAME

6       word.h - Машинные слова
7
8

SYNOPSIS

10       #include 'bee2/defs.h'
11       #include 'bee2/core/safe.h'
12       #include 'bee2/core/u32.h'
13
14
15   Макросы
16       #define wordEq(a,  b)   ((word)(a) == (word)(b))
17           Машинные слова a и b равны?
18       #define wordNeq(a,  b)   ((word)(a) != (word)(b))
19           Машинные слова a и b не равны?
20       #define wordLess(a,  b)   ((word)(a) < (word)(b))
21           Машинное слово a меньше машинного слова b?
22       #define wordLeq(a,  b)   ((word)(a) <= (word)(b))
23           Машинное слово a не больше машинного слова b?
24       #define wordGreater(a,  b)   wordLess(b, a)
25           Машинное слово a больше машинного слова b?
26       #define wordGeq(a,  b)   wordLeq(b, a)
27           Машинное слово a не меньше машинного слова b?
28       #define wordEq01(a,  b)   ((word)wordEq(a, b))
29           Машинные слова a и b равны (WORD_0 / WORD_1)?
30       #define wordNeq01(a,  b)   ((word)wordNeq(a, b))
31           Машинные слова a и b не равны (WORD_0 / WORD_1)?
32       #define wordLess01(a,  b)   ((word)wordLess(a, b))
33           Машинное слово a меньше машинного слова b (WORD_0 / WORD_1)?
34       #define wordLeq01(a,  b)   ((word)wordLeq(a, b))
35           Машинное слово a не больше машинного слова b (WORD_0 / WORD_1)?
36       #define wordGreater01(a,  b)   ((word)wordGreater(a, b))
37           Машинное слово a больше машинного слова b (WORD_0 / WORD_1)?
38       #define wordGeq01(a,  b)   ((word)wordGeq(a, b))
39           Машинное слово a не меньше машинного слова b (WORD_0 / WORD_1)?
40       #define wordEq0M(a,  b)   ((word)(wordNeq01(a, b) - WORD_1))
41           Машинные слова a и b равны (WORD_0 / WORD_MAX)?
42       #define wordNeq0M(a,  b)   ((word)(wordEq01(a, b) - WORD_1))
43           Машинные слова a и b не равны (WORD_0 / WORD_MAX)?
44       #define wordLess0M(a,  b)   ((word)(wordGeq01(a, b) - WORD_1))
45           Машинное слово a меньше машинного слова b (WORD_0 / WORD_MAX)?
46       #define wordLeq0M(a,  b)   ((word)(wordGreater01(a, b) - WORD_1))
47           Машинное слово a не больше машинного слова b (WORD_0 / WORD_MAX)?
48       #define wordGreater0M(a,  b)   ((word)(wordLeq01(a, b) - WORD_1))
49           Машинное слово a больше машинного слова b (WORD_0 / WORD_MAX)?
50       #define wordGeq0M(a,  b)   ((word)(wordLess01(a, b) - WORD_1))
51           Машинное слово a не меньше машинного слова b (WORD_0 / WORD_MAX)?
52

Подробное описание

54       Реализованы быстрые манипуляции с машинными словами.
55
56       Прим.
57           Манипуляции с массивами машинных слов реализованы в модуле ww.
58
59       Макросы сравнений введены для того, чтобы поддержать (и подчеркнуть)
60       регулярный, т. е. без ветвлений, характер сравнений. На известных
61       аппаратных платформах обычные сравнения a < b, a > b, a == b,...
62       регулярны. Поэтому реализованные макросы являются псевдонимами этих
63       сравнений.
64
65       Если обычные сравнения все таки не регулярны, то можно использовать
66       следующие универсальные (но медленные) макросы [1, с. 35]:
67
68       #define wordLess(a, b)\
69           ((~(a) & (b) | ((~(a) | (b)) & (a) - (b))) >> (B_PER_W - 1))
70       #define wordLeq(a, b)\
71           (((~(a) | (b)) & (((a) ^ (b)) | ~((b) - (a)))) >> (B_PER_W - 1))
72       ...
73
74
75       Макросы сравнений без суффиксов 01 и 0M возвращают результат типа int.
76
77       Макросы с суффиксом 01 возвращают результат типа word, который
78       принимает значения 0 (WORD_0) или 1 (WORD_1). Эти макросы удобно
79       использовать в арифметике больших чсел.
80
81       Макросы с суффиксом 0M меняют WORD_1 на WORD_MAX. Возвращаемые значения
82       можно использовать как маски при организации регулярных вычислений.
83

Макросы

85   #define wordEq0M(a, b)   ((word)(wordNeq01(a, b) - WORD_1))
86   #define wordGeq0M(a, b)   ((word)(wordLess01(a, b) - WORD_1))
87   #define wordGreater0M(a, b)   ((word)(wordLeq01(a, b) - WORD_1))
88   #define wordLeq0M(a, b)   ((word)(wordGreater01(a, b) - WORD_1))
89   #define wordLess0M(a, b)   ((word)(wordGeq01(a, b) - WORD_1))
90   #define wordNeq0M(a, b)   ((word)(wordEq01(a, b) - WORD_1))

Автор

92       Автоматически создано Doxygen для Библиотека Bee2 из исходного текста.
93
94
95
96Библиотека Bee2                 Пт 23 Июн 2023                       word.h(3)
Impressum