9.3. ÐаÑемаÑиÑеÑкие ÑÑнкÑии и опеÑаÑоÑÑ
ÐаÑемаÑиÑеÑкие опеÑаÑоÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва Ñипов Postgres Pro. Ðак ÑабоÑаÑÑ ÑÑи опеÑаÑии Ñ Ñипами, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð½ÐµÑ ÑÑандаÑÑнÑÑ ÑоглаÑений о маÑемаÑиÑеÑÐºÐ¸Ñ Ð´ÐµÐ¹ÑÑвиÑÑ (напÑимеÑ, Ñ Ñипами даÑÑ/вÑемени), Ð¼Ñ Ð¾Ð¿Ð¸Ñем в поÑледÑÑÑÐ¸Ñ ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ .
РТаблиÑе 9.4 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе доÑÑÑпнÑе маÑемаÑиÑеÑкие опеÑаÑоÑÑ.
ТаблиÑа 9.4. ÐаÑемаÑиÑеÑкие опеÑаÑоÑÑ
| ÐпеÑаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ | РезÑлÑÑÐ°Ñ |
|---|---|---|---|
+ | Ñложение | 2 + 3 | 5 |
- | вÑÑиÑание | 2 - 3 | -1 |
* | Ñмножение | 2 * 3 | 6 |
/ | деление (пÑи ÑелоÑиÑленном делении оÑÑаÑок оÑбÑаÑÑваеÑÑÑ) | 4 / 2 | 2 |
% | оÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ | 5 % 4 | 1 |
^ | возведение в ÑÑÐµÐ¿ÐµÐ½Ñ (вÑÑиÑлÑеÑÑÑ Ñлева напÑаво) | 2.0 ^ 3.0 | 8 |
|/ | квадÑаÑнÑй коÑÐµÐ½Ñ | |/ 25.0 | 5 |
||/ | кÑбиÑеÑкий коÑÐµÐ½Ñ | ||/ 27.0 | 3 |
! | ÑакÑоÑиал (ÑÑÑаÑевÑий опеÑаÑоÑ, его заменÑÐµÑ ÑÑнкÑÐ¸Ñ factorial()) | 5 ! | 120 |
!! | ÑакÑоÑиал в пÑеÑикÑной ÑоÑме (ÑÑÑаÑевÑий опеÑаÑоÑ, его заменÑÐµÑ ÑÑнкÑÐ¸Ñ factorial()) | !! 5 | 120 |
@ | модÑÐ»Ñ ÑиÑла (абÑолÑÑное знаÑение) | @ -5.0 | 5 |
& | биÑовÑй AND | 91 & 15 | 11 |
| | биÑовÑй OR | 32 | 3 | 35 |
# | биÑовÑй XOR | 17 # 5 | 20 |
~ | биÑовÑй NOT | ~1 | -2 |
<< | биÑовÑй Ñдвиг влево | 1 << 4 | 16 |
>> | биÑовÑй Ñдвиг впÑаво | 8 >> 2 | 2 |
ÐиÑовÑе опеÑаÑоÑÑ ÑабоÑаÑÑ ÑолÑко Ñ ÑелоÑиÑленнÑми Ñипами даннÑÑ
и Ñ Ð±Ð¸ÑовÑми ÑÑÑоками bit и bit varying, как показано в ТаблиÑе 9.14.
РТаблиÑе 9.5 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑÑеÑÑвÑÑÑие маÑемаÑиÑеÑкие ÑÑнкÑии. СокÑаÑение dp в ней обознаÑÐ°ÐµÑ Ñип double precision (плаваÑÑее Ñ Ð´Ð²Ð¾Ð¹Ð½Ð¾Ð¹ ÑоÑноÑÑÑÑ). Ðногие из ÑÑиÑ
ÑÑнкÑий имеÑÑ Ð½ÐµÑколÑко ÑоÑм Ñ ÑазнÑми Ñипами аÑгÑменÑов. Ðа иÑклÑÑением ÑлÑÑаев, где ÑÑо Ñказано Ñвно, лÑÐ±Ð°Ñ ÑоÑма ÑÑнкÑии возвÑаÑÐ°ÐµÑ ÑезÑлÑÑÐ°Ñ Ñого же Ñипа, ÑÑо и аÑгÑменÑ. ФÑнкÑии, ÑабоÑаÑÑие Ñ Ð´Ð°Ð½Ð½Ñми double precision, в маÑÑе Ñвоей иÑполÑзÑÑÑ ÑеализаÑии из ÑиÑÑемнÑÑ
библиоÑек ÑеÑвеÑа, поÑÑÐ¾Ð¼Ñ ÑоÑноÑÑÑ Ð¸ поведение в гÑаниÑнÑÑ
ÑлÑÑаÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ ÑиÑÑÐµÐ¼Ñ ÑеÑвеÑа.
ТаблиÑа 9.5. ÐаÑемаÑиÑеÑкие ÑÑнкÑии
РТаблиÑе 9.6 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑнкÑии Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑлÑÑайнÑÑ ÑиÑел.
ТаблиÑа 9.6. СлÑÑайнÑе ÑÑнкÑии
ФÑнкÑÐ¸Ñ random() иÑполÑзÑÐµÑ Ð¿ÑоÑÑой линейнÑй конгÑÑÑнÑнÑй алгоÑиÑм. Ðна ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑо, но не подÑ
Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ ÐºÑипÑогÑаÑиÑеÑкиÑ
пÑиложений; более безопаÑÐ½Ð°Ñ Ð°Ð»ÑÑеÑнаÑива имееÑÑÑ Ð² модÑле pgcrypto. ÐÑли воÑполÑзоваÑÑÑÑ ÑÑнкÑией setseed() и вÑзÑваÑÑ ÐµÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же аÑгÑменÑом, в ÑекÑÑем ÑеанÑе можно полÑÑаÑÑ Ð¿Ð¾Ð²ÑоÑÑÑÑиеÑÑ ÑезÑлÑÑаÑÑ random(). ÐÑли ÑÑнкÑÐ¸Ñ setseed() до ÑÑого не вÑзÑвалаÑÑ Ð² ÑекÑÑем ÑеанÑе, пÑи пеÑвом вÑзове random() заÑÑавка бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑена из плаÑÑоÑмозавиÑимого иÑÑоÑника ÑлÑÑайнÑÑ
ÑиÑел.
РТаблиÑе 9.7 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе имеÑÑиеÑÑ ÑÑигономеÑÑиÑеÑкие ÑÑнкÑии. ÐÑе ÑÑи ÑÑнкÑии пÑинимаÑÑ Ð°ÑгÑменÑÑ Ð¸ возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñипа double precision. У каждой ÑÑнкÑии имеÑÑÑÑ Ð´Ð²Ðµ ваÑиаÑии: одна измеÑÑÐµÑ ÑÐ³Ð»Ñ Ð² ÑадианаÑ
, а вÑоÑÐ°Ñ â в гÑадÑÑаÑ
.
ТаблиÑа 9.7. ТÑигономеÑÑиÑеÑкие ÑÑнкÑии
ÐÑимеÑание
Также можно ÑабоÑаÑÑ Ñ Ñглами в гÑадÑÑаÑ
, пÑименÑÑ Ð²ÑÑеÑпомÑнÑÑÑе ÑÑнкÑии пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸ radians(). Ðднако пÑедпоÑÑиÑелÑнее иÑполÑзоваÑÑ ÑÑигономеÑÑиÑеÑкие ÑÑнкÑии Ñ Ð³ÑадÑÑами, Ñак как ÑÑо позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¾Ñибок окÑÑÐ³Ð»ÐµÐ½Ð¸Ñ Ð² оÑобÑÑ
ÑлÑÑаÑÑ
, напÑимеÑ, пÑи вÑÑиÑлении degrees()sind(30).
РТаблиÑе 9.8 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе имеÑÑиеÑÑ Ð³Ð¸Ð¿ÐµÑболиÑеÑкие ÑÑнкÑии. ÐÑе ÑÑи ÑÑнкÑии пÑинимаÑÑ Ð°ÑгÑменÑÑ Ð¸ возвÑаÑаÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ñипа double precision.
ТаблиÑа 9.8. ÐипеÑболиÑеÑкие ÑÑнкÑии