9.3. ÐаÑемаÑиÑеÑкие ÑÑнкÑии и опеÑаÑоÑÑ #
ÐаÑемаÑиÑеÑкие опеÑаÑоÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»ÐµÐ½Ñ Ð´Ð»Ñ Ð¼Ð½Ð¾Ð¶ÐµÑÑва Ñипов Postgres Pro. Ðак ÑабоÑаÑÑ ÑÑи опеÑаÑии Ñ Ñипами, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð½ÐµÑ ÑÑандаÑÑнÑÑ ÑоглаÑений о маÑемаÑиÑеÑÐºÐ¸Ñ Ð´ÐµÐ¹ÑÑвиÑÑ (напÑимеÑ, Ñ Ñипами даÑÑ/вÑемени), Ð¼Ñ Ð¾Ð¿Ð¸Ñем в поÑледÑÑÑÐ¸Ñ ÑÐ°Ð·Ð´ÐµÐ»Ð°Ñ .
РТаблиÑе 9.4 Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð¼Ð°ÑемаÑиÑеÑкие опеÑаÑоÑÑ, ÑеализованнÑе Ð´Ð»Ñ ÑÑандаÑÑнÑÑ
ÑиÑловÑÑ
Ñипов. ÐÑли не оÑмеÑено обÑаÑное, опеÑаÑоÑÑ, пÑинимаÑÑие ÑиÑловой_Ñип, ÑабоÑаÑÑ Ñ Ñипами smallint, integer, bigint, numeric, real и double precision. ÐпеÑаÑоÑÑ, пÑинимаÑÑие ÑелоÑиÑленнÑй_Ñип, ÑабоÑаÑÑ Ñ Ñипами smallint, integer и bigint. Ðа иÑклÑÑением Ñвно оÑмеÑеннÑÑ
ÑлÑÑаев, вÑе ÑазновидноÑÑи опеÑаÑоÑов возвÑаÑаÑÑ Ñакой же Ñип даннÑÑ
, коÑоÑÑй Ð¸Ð¼ÐµÐµÑ Ð¸Ñ
аÑгÑÐ¼ÐµÐ½Ñ (или иÑ
аÑгÑменÑÑ). ÐÑÐ·Ð¾Ð²Ñ Ñ Ð½ÐµÐ¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми Ñипами аÑгÑменÑов, напÑÐ¸Ð¼ÐµÑ integer + numeric, ÑазÑеÑаÑÑÑÑ Ð² полÑÐ·Ñ Ñипа, оказавÑегоÑÑ Ð¿Ð¾Ñледним в опÑеделÑннÑÑ
вÑÑе ÑпиÑкаÑ
.
ТаблиÑа 9.4. ÐаÑемаÑиÑеÑкие опеÑаÑоÑÑ
ÐпеÑаÑÐ¾Ñ ÐпиÑание ÐÑимеÑ(Ñ) |
|---|
Сложение
|
УнаÑнÑй плÑÑ (Ð½ÐµÑ Ð¾Ð¿ÐµÑаÑии)
|
ÐÑÑиÑание
|
Смена знака
|
Умножение
|
Ðеление (пÑи делении ÑелоÑиÑленнÑÑ Ñипов ÑезÑлÑÑÐ°Ñ Ð¾ÐºÑÑглÑеÑÑÑ Ð² напÑавлении нÑлÑ)
|
ÐÑÑаÑок Ð¾Ñ Ð´ÐµÐ»ÐµÐ½Ð¸Ñ; имееÑÑÑ Ð´Ð»Ñ Ñипов
|
Ðозведение в ÑÑепенÑ
РоÑлиÑие Ð¾Ñ Ð¿ÑинÑÑого в маÑемаÑике поÑÑдка,
|
ÐвадÑаÑнÑй коÑенÑ
|
ÐÑбиÑеÑкий коÑенÑ
|
ÐбÑолÑÑное знаÑение
|
ÐиÑовое Ð
|
ÐиÑовое ÐÐÐ
|
ÐиÑовое иÑклÑÑаÑÑее ÐÐÐ
|
ÐиÑовое ÐÐ
|
ÐиÑовÑй Ñдвиг влево
|
ÐиÑовÑй Ñдвиг впÑаво
|
РТаблиÑе 9.5 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑÑеÑÑвÑÑÑие маÑемаÑиÑеÑкие ÑÑнкÑии. Ðногие из ÑÑиÑ
ÑÑнкÑий имеÑÑ Ð½ÐµÑколÑко ÑоÑм Ñ ÑазнÑми Ñипами аÑгÑменÑов. Ðа иÑклÑÑением ÑлÑÑаев, где ÑÑо Ñказано Ñвно, вÑе ÑазновидноÑÑи ÑÑнкÑий возвÑаÑаÑÑ ÑÐ¾Ñ Ð¶Ðµ Ñип даннÑÑ
, коÑоÑÑй Ð¸Ð¼ÐµÐµÑ Ð¸Ñ
аÑгÑÐ¼ÐµÐ½Ñ (или аÑгÑменÑÑ); вÑÐ·Ð¾Ð²Ñ Ñ Ð½ÐµÐ¾Ð´Ð¸Ð½Ð°ÐºÐ¾Ð²Ñми Ñипами ÑазÑеÑаÑÑÑÑ Ð¿Ð¾ ÑÐ¾Ð¼Ñ Ð¶Ðµ пÑинÑипÑ, ÑÑо бÑл опиÑан вÑÑе Ð´Ð»Ñ Ð¾Ð¿ÐµÑаÑоÑов. ФÑнкÑии, ÑабоÑаÑÑие Ñ Ð´Ð°Ð½Ð½Ñми double precision, в маÑÑе Ñвоей иÑполÑзÑÑÑ ÑеализаÑии из ÑиÑÑемнÑÑ
библиоÑек ÑеÑвеÑа, поÑÑÐ¾Ð¼Ñ ÑоÑноÑÑÑ Ð¸ поведение в гÑаниÑнÑÑ
ÑлÑÑаÑÑ
Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð²Ð¸ÑеÑÑ Ð¾Ñ ÑиÑÑÐµÐ¼Ñ ÑеÑвеÑа.
ТаблиÑа 9.5. ÐаÑемаÑиÑеÑкие ÑÑнкÑии
РТаблиÑе 9.6 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе ÑÑнкÑии Ð´Ð»Ñ Ð³ÐµÐ½ÐµÑаÑии ÑлÑÑайнÑÑ ÑиÑел.
ТаблиÑа 9.6. СлÑÑайнÑе ÑÑнкÑии
ФÑнкÑии random() и random_normal(), ÑказаннÑе в ÑаблиÑе ТаблиÑа 9.6, иÑполÑзÑÑÑ Ð´ÐµÑеÑминиÑованнÑй генеÑаÑÐ¾Ñ Ð¿ÑевдоÑлÑÑайнÑÑ
ÑиÑел. Ðн ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑо, но не подÑ
Ð¾Ð´Ð¸Ñ Ð´Ð»Ñ ÐºÑипÑогÑаÑиÑеÑкиÑ
пÑиложений; более безопаÑÐ½Ð°Ñ Ð°Ð»ÑÑеÑнаÑива имееÑÑÑ Ð² модÑле pgcrypto. ÐÑли воÑполÑзоваÑÑÑÑ ÑÑнкÑией setseed() и вÑзÑваÑÑ ÐµÑ Ñ Ð¾Ð´Ð½Ð¸Ð¼ и Ñем же аÑгÑменÑом, в ÑекÑÑем ÑеанÑе можно полÑÑаÑÑ Ð¿Ð¾Ð²ÑоÑÑÑÑиеÑÑ Ð¿Ð¾ÑледоваÑелÑноÑÑи ÑезÑлÑÑаÑов random() или random_normal(). ÐÑли ÑÑнкÑÐ¸Ñ setseed() до ÑÑого не вÑзÑвалаÑÑ Ð² ÑекÑÑем ÑеанÑе, пÑи пеÑвом вÑзове одной из ÑÑиÑ
ÑÑнкÑий заÑÑавка бÑÐ´ÐµÑ Ð¿Ð¾Ð»ÑÑена из плаÑÑоÑмозавиÑимого иÑÑоÑника ÑлÑÑайнÑÑ
ÑиÑел.
РТаблиÑе 9.7 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе имеÑÑиеÑÑ ÑÑигономеÑÑиÑеÑкие ÑÑнкÑии. У каждой ÑÑнкÑии имеÑÑÑÑ Ð´Ð²Ðµ ваÑиаÑии: одна измеÑÑÐµÑ ÑÐ³Ð»Ñ Ð² ÑÐ°Ð´Ð¸Ð°Ð½Ð°Ñ , а вÑоÑÐ°Ñ â в гÑадÑÑÐ°Ñ .
ТаблиÑа 9.7. ТÑигономеÑÑиÑеÑкие ÑÑнкÑии
ÐÑимеÑание
Также можно ÑабоÑаÑÑ Ñ Ñглами в гÑадÑÑаÑ
, пÑименÑÑ Ð²ÑÑеÑпомÑнÑÑÑе ÑÑнкÑии пÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¸ radians(). Ðднако пÑедпоÑÑиÑелÑнее иÑполÑзоваÑÑ ÑÑигономеÑÑиÑеÑкие ÑÑнкÑии Ñ Ð³ÑадÑÑами, Ñак как ÑÑо позволÑÐµÑ Ð¸Ð·Ð±ÐµÐ¶Ð°ÑÑ Ð¾Ñибок окÑÑÐ³Ð»ÐµÐ½Ð¸Ñ Ð² оÑобÑÑ
ÑлÑÑаÑÑ
, напÑимеÑ, пÑи вÑÑиÑлении degrees()sind(30).
РТаблиÑе 9.8 пеÑеÑиÑÐ»ÐµÐ½Ñ Ð²Ñе имеÑÑиеÑÑ Ð³Ð¸Ð¿ÐµÑболиÑеÑкие опеÑаÑоÑÑ.
ТаблиÑа 9.8. ÐипеÑболиÑеÑкие ÑÑнкÑии