# сравнение

операторы сравнения, отношения

## Последовательность вызова

                a==b
                a~=b или a<>b
                a<b
                a<=b
                a>b
                a>=b

## Аргументы

a

  любой тип переменной для сравнения величин `a==b`, `a~=b` `a<>b`, но для сравнений, связанных с порядком `a<b`, `a<=b`, `a>b`, `a>=b`, ограничен массивами вещественных чисел с плавающей запятой и массивами целочисленных значений.

b

  любой тип переменной для сравнения величин `a==b`, `a~=b` `a<>b`, но для сравнений, связанных с порядком `a<b`, `a<=b`, `a>b`, `a>=b`, ограничен массивами вещественных чисел с плавающей запятой и массивами целочисленных значений.

## Описание

Нужно различать два класса операторов:

сравнение на равенство и неравенство:

  `a==b`, `a~=b` (или по-другому `a<>b`). Эти операторы применимы к любому типу операндов.

Сравнения, связанные с порядком:

  `a<b`, `a<=b`, `a>b`, `a>=b`. Эти операторы применимы только к массивам чисел с плавающей запятой и целочисленным массивам.

Смысл операторов сравнения также зависит от типа операндов:

Для массивов переменных

  таких как массивы чисел с плавающей запятой и массивы целочисленных значений, массивы логических значений, строковые массивы, массивы полиномиальных и рациональных значений, массивы дескрипторов, списки... применимы следующие правила:

  - Если `a` и `b` являются массивами одного типа и размера, то сравнение выполняется поэлементно, а результат является массивом логических значений того же размера.

  - Если `a` и `b` являются массивами одного типа, но `a` или `b` является скаляром, то скаляр сравнивается с каждым элементом массива. Результат является массивом логических значений того же размера, что и оператор-нескаляр.

  - В иных случаях результатом является логическое значение `%f`

  - Если типы данных операндов отличаются, но "совместимы" как числа с плавающей запятой и целые числа, то перед сравнение производится преобразование типов.

Для других типов операндов

  таких как `function` и `libraries` результатом является `%t`, если объекты идентичны и `%f` в противном случае.

  Сравнение на равенство операндов несовместимых типов данных возвращает `%f`.

## Примеры

    // поэлементные сравнения
    (1:5)==3
    (1:5)<=4
    (1:5)<=[1 4 2 3 0]
    1<[]
    list(1,2,3)~=list(1,3,3)
    "foo"=="bar"
    sparse([1,2;4,5;3,10],[1,2,3]) == sparse([1,2;4,5;3,10],[1,2,3])

    //пообъектные сравнения
    (1:10)==[4,3]
    'foo'==3
    1==[]
    list(1,2,3)==1

    isequal(list(1,2,3),1)
    isequal(1:10,1)

    //сравнение с преобразованием типов данных
    int32(1)==1
    int32(1)<1.5
    int32(1:5)<int8(3)
    p=poly(0,'s','c')
    p==0
    p/poly(1,'s','c')==0

## Смотрите также

- меньше
- больше
- boolean
- isequal