В інформатиці, тришляхове порівняння приймає два значення A і B, що належать до лінійно впорядкованого типу і визначає A < B, A = B чи A > B за одну дію, у відповідності до математичного [en].
У програмуванні
У мовах програмування (починаючи з ), Ceylon, Groovy, Perl, PHP, Ruby оператор тришляхового порівняння має вигляд <=>
. Багато мов програмування мають функції з подібним призначенням у стандартних чи інших бібліотеках (наприклад, memcmp
, strcmp
й інші для C; Comparable#compareTo
і Comparator#compare
для Java; тощо).
Деякі з мов (чи бібліотек) однозначно регламентують результат цієї операції як число −1
, 0
чи 1
(наприклад, Perl), інші дотримуються гнучкіших формулювань. Зазвичай (наприклад, у Ceylon, Groovy, PHP; у C для strcmp
-подібних функцій; у Java для Comparable#compareTo
і Comparator#compare
) специфікація чи інша документація оголошує, що результат може бути будь-яким цілим числом, знак якого має відповідати свіввідношенню операндів/аргументів (наприклад, 10 <=> 5
поверне якесь додатне число, необов'язково саме 1
, а 4 <=> 17
— якесь від'ємне число, необов'язково саме −1
). Наприклад, у PHP результатом виразу a <=> b
найчастіше виступає число −1
, 0
чи 1
, однак програміст не може покладатися на це, оскільки нема гарантій, що ця поведінка не зміниться в іншій версії чи в іншому оточенні. У C++20 результат оператора <=>
типізовано навіть не цілими числами, а іншими типами даних (std::strong_ordering
й подібні), які хоча дозволяють виконувати певні операції й надають певні гарантії, але не (приводяться неявно) до цілих чисел. (Загалом ця ситуація дещо нагадує ситуацію з представленням логічних значень у різних мовах: у деяких мовах значення «істина» — це строго 1
, у деяких — будь-яке ненульове число приймається за «істину», у деяких логічні значення зовсім несумісні з цілочисельним типом даних.) Деякі мови мають вбудовані засоби, що дозволяють легко «нормалізувати» результат тришляхового порівняння до множини за бажання (наприклад, методи Integer.signum
у Java й Math.sign
у C#).
У термінології деяких мов програмування (зокрема Perl) оператор тришляхового порівняння називається англ. spaceship operator — дослівно «оператор „космічний корабель“, оператор „зореліт“». Назва з'явилася, імовірно, через візуальну подібність до деяких варіантів зображень зорельотів. [en], відомий експерт і автор книжок з Perl, стверджує, що він особисто ввів цю назву в обіг, бо втомився казати «оператор „менше ніж, дорівнює, більше ніж“», а <=>
нагадувало йому зображення в [en]; утім не виключено, що одна й та сама ідея могла приходити до різних людей (дехто вважає, що назва з'явилася через подібність вигляду оператора до зорельотів «TIE Fighter» у «Зоряних війнах»).
Якщо мова програмування (чи бібліотека) допускає непорівня́нні (невпорядковні) значення (зокрема підтримує IEEE 754 з його NaN), то виникає питання, який саме результат для них повинен повертати оператор. Різні мови програмування (бібліотеки) по-різному вирішують цю проблему:
- C++20 дозволяє повертати в таких випадках значення
std::partial_ordering::unordered
, фактично перетворюючи тришляхове порівняння на чотирихляхове для деяких типів вхідних даних. - Класи
Double
іFloat
у Java, реалізуючи інтерфейсComparable
, вважають значення NaN найбільшим можливим — навіть більшим за +∞. - Деякі у випадку неможливості порівняти операнди (незалежно від того, з якого саме боку непорівня́нне значення) відповідають «більше».
- Деякі не конкретизують поведінку в такому випадку.
Обчислення на рівні апаратного забезпечення
Ця операція в входить в набори команд багатьох процесорів. Цілі числа на деяких машинах представлені у вигляді знак-і-величина або в оберненому коді (див. представлення чисел зі знаком), обидва підходи дозволяють відрізнити додатний і від'ємний нулі. Це не порушує трихотомію якщо прийнято узгоджений лінійний порядок: правильно або -0 = +0, або -0 < +0. Однак, загальновживані типи з рухомою комою мають виняток із тріхотомії: в них наявне спеціальне значення "NaN" (не число) таке, що всі вирази x < NaN, x > NaN та x = NaN хибні для всіх x з рухомою комою (включно з самим NaN).
Література
Цей розділ потребує доповнення. (березень 2020) |
- O. Smolsky. “Defaulted comparison operators” (WG21 paper, 2014-02-19).
- B. Stroustrup. “Default Comparisons (R2)” (WG21 paper, 2015-04-09).
- B. Stroustrup. “Thoughts about Comparisons (R2)” (WG21 paper, 2015-04-09).
- O. Smolsky. “On generating default comparisons” (Kona 2015 wiki, Oct 2015).
- L. Crowl. “Comparison in C++” (WG21 paper, 2016-11-27).
- J. Maurer. “Proposed wording for default comparisons, revision 4” (WG21 paper, 2016-06-23).
- L. Crowl. “Comparison in C++: Basic Facilities” (WG21 paper, 2016-10-15).
- W. Brown. “An Extensible Approach to Obtaining Selected Operators” (WG21 paper, 2016-10-10).
- T. Van Eerd. “Bravely Default” (WG21 paper, 2016-10-15).
- D. Stone. “Implicit and Explicit Default Comparison Operators” (WG21 paper, 2016-09-18).
Зноски
- Кочерга, О.; Мейнарович, Є. (2010). Англійсько-українсько-англійський словник наукової мови (фізика та споріднені науки). Частина І англійсько-українська.
- perlop - perldoc.perl.org. perldoc.perl.org. Процитовано 5 червня 2020.
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет
V informatici trishlyahove porivnyannya prijmaye dva znachennya A i B sho nalezhat do linijno vporyadkovanogo tipu i viznachaye A lt B A B chi A gt B za odnu diyu u vidpovidnosti do matematichnogo en U programuvanniU movah programuvannya C pochinayuchi z C 20 Ceylon Groovy Perl PHP Ruby operator trishlyahovogo porivnyannya maye viglyad lt gt Bagato mov programuvannya mayut funkciyi z podibnim priznachennyam u standartnih chi inshih bibliotekah napriklad memcmp strcmp j inshi dlya C Comparable compareTo i Comparator compare dlya Java tosho Deyaki z mov chi bibliotek odnoznachno reglamentuyut rezultat ciyeyi operaciyi yak chislo a href wiki 1 D1 87 D0 B8 D1 81 D0 BB D0 BE title 1 chislo 1 a a href wiki 0 D1 87 D0 B8 D1 81 D0 BB D0 BE title 0 chislo 0 a chi a href wiki 1 D1 87 D0 B8 D1 81 D0 BB D0 BE title 1 chislo 1 a napriklad Perl inshi dotrimuyutsya gnuchkishih formulyuvan Zazvichaj napriklad u Ceylon Groovy PHP u C dlya strcmp podibnih funkcij u Java dlya Comparable compareTo i Comparator compare specifikaciya chi insha dokumentaciya ogoloshuye sho rezultat mozhe buti bud yakim cilim chislom znak yakogo maye vidpovidati svivvidnoshennyu operandiv argumentiv napriklad 10 lt gt 5 poverne yakes dodatne chislo neobov yazkovo same 1 a 4 lt gt 17 yakes vid yemne chislo neobov yazkovo same 1 Napriklad u PHP rezultatom virazu a lt gt b najchastishe vistupaye chislo 1 0 chi 1 odnak programist ne mozhe pokladatisya na ce oskilki nema garantij sho cya povedinka ne zminitsya v inshij versiyi chi v inshomu otochenni U C 20 rezultat operatora lt gt tipizovano navit ne cilimi chislami a inshimi tipami danih std strong ordering j podibni yaki hocha dozvolyayut vikonuvati pevni operaciyi j nadayut pevni garantiyi ale ne privodyatsya neyavno do cilih chisel Zagalom cya situaciya desho nagaduye situaciyu z predstavlennyam logichnih znachen u riznih movah u deyakih movah znachennya istina ce strogo 1 u deyakih bud yake nenulove chislo prijmayetsya za istinu u deyakih logichni znachennya zovsim nesumisni z cilochiselnim tipom danih Deyaki movi mayut vbudovani zasobi sho dozvolyayut legko normalizuvati rezultat trishlyahovogo porivnyannya do mnozhini 1 0 1 displaystyle 1 0 1 za bazhannya napriklad metodi Integer signum u Java j Math sign u C U terminologiyi deyakih mov programuvannya zokrema Perl operator trishlyahovogo porivnyannya nazivayetsya angl spaceship operator doslivno operator kosmichnij korabel operator zorelit Nazva z yavilasya imovirno cherez vizualnu podibnist do deyakih variantiv zobrazhen zorelotiv en vidomij ekspert i avtor knizhok z Perl stverdzhuye sho vin osobisto vviv cyu nazvu v obig bo vtomivsya kazati operator menshe nizh dorivnyuye bilshe nizh a lt gt nagaduvalo jomu zobrazhennya v en utim ne viklyucheno sho odna j ta sama ideya mogla prihoditi do riznih lyudej dehto vvazhaye sho nazva z yavilasya cherez podibnist viglyadu operatora do zorelotiv TIE Fighter u Zoryanih vijnah Yaksho mova programuvannya chi biblioteka dopuskaye neporivnya nni nevporyadkovni znachennya zokrema pidtrimuye IEEE 754 z jogo NaN to vinikaye pitannya yakij same rezultat dlya nih povinen povertati operator Rizni movi programuvannya biblioteki po riznomu virishuyut cyu problemu C 20 dozvolyaye povertati v takih vipadkah znachennya std partial ordering unordered faktichno peretvoryuyuchi trishlyahove porivnyannya na chotirihlyahove dlya deyakih tipiv vhidnih danih Klasi Double i Float u Java realizuyuchi interfejsComparable vvazhayut znachennya NaN najbilshim mozhlivim navit bilshim za Deyaki u vipadku nemozhlivosti porivnyati operandi nezalezhno vid togo z yakogo same boku neporivnya nne znachennya vidpovidayut bilshe Deyaki ne konkretizuyut povedinku v takomu vipadku Obchislennya na rivni aparatnogo zabezpechennyaCya operaciya v vhodit v nabori komand bagatoh procesoriv Cili chisla na deyakih mashinah predstavleni u viglyadi znak i velichina abo v obernenomu kodi div predstavlennya chisel zi znakom obidva pidhodi dozvolyayut vidrizniti dodatnij i vid yemnij nuli Ce ne porushuye trihotomiyu yaksho prijnyato uzgodzhenij linijnij poryadok pravilno abo 0 0 abo 0 lt 0 Odnak zagalnovzhivani tipi z ruhomoyu komoyu mayut vinyatok iz trihotomiyi v nih nayavne specialne znachennya NaN ne chislo take sho vsi virazi x lt NaN x gt NaN ta x NaN hibni dlya vsih x z ruhomoyu komoyu vklyuchno z samim NaN LiteraturaCej rozdil potrebuye dopovnennya berezen 2020 O Smolsky Defaulted comparison operators WG21 paper 2014 02 19 B Stroustrup Default Comparisons R2 WG21 paper 2015 04 09 B Stroustrup Thoughts about Comparisons R2 WG21 paper 2015 04 09 O Smolsky On generating default comparisons Kona 2015 wiki Oct 2015 L Crowl Comparison in C WG21 paper 2016 11 27 J Maurer Proposed wording for default comparisons revision 4 WG21 paper 2016 06 23 L Crowl Comparison in C Basic Facilities WG21 paper 2016 10 15 W Brown An Extensible Approach to Obtaining Selected Operators WG21 paper 2016 10 10 T Van Eerd Bravely Default WG21 paper 2016 10 15 D Stone Implicit and Explicit Default Comparison Operators WG21 paper 2016 09 18 ZnoskiKocherga O Mejnarovich Ye 2010 Anglijsko ukrayinsko anglijskij slovnik naukovoyi movi fizika ta sporidneni nauki Chastina I anglijsko ukrayinska perlop perldoc perl org perldoc perl org Procitovano 5 chervnya 2020