1word.h(3) Library Functions Manual word.h(3)
2
3
4
6 word.h - Машинные слова
7
8
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 Ср 19 Июл 2023 00:00:00 word.h(3)