Scilab Home page | Wiki | Bug tracker | Forge | Mailing list archives | ATOMS | File exchange
Please login or create an account
Change language to: English - Français - Português - 日本語 -
Справка Scilab >> Scilab > Ключевые слова Scilab > сравнение

сравнение

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

Синтаксис

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.

  • Полиномы: %s==%z возвращает %F : Два полинома не могут считаться равными, если они не относятся к одной и той же переменной.

  • Рациональные числа: 1/%s == 1/%z возвращает %F : Два рациональных числа не могут быть равными если они не относятся к одной и той же переменной. Кроме того, одно и тоже рациональное число может иметь различные ненормированные формы, которые не могут считаться равными. Например, 2/(2*%z) == 1/%z возвращат %F, даже в режиме упрощения simp_mode(%T).

  • Разрежённая числовая матрица: любое поэлементное сравнение с полным числовым массивом всегда возвращает разрежённый массив логических значений. См. примеры.

  • Графические идентификаторы: графический дескриптор h1 и его копия h2=h1 всегда будут равными, даже если графические окна меняются с помощью одного из них. См. примеры.

Примеры

// поэлементные сравнения
(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)
1 == complex(1,0)
1 > complex(1,0)  // по-прежнему OK, однако...
1 > complex(1,1)  // => ошибка: комплексные числа не упорядочены
--> int32(1) == 1
 ans  =
  T

--> int32(1) < 1.5
 ans  =
  T

--> int32(1:5) < int8(3)
 ans  =
  T T F F F

--> 1 == complex(1,0)
 ans  =
  T

--> 1 > complex(1,0)  // по-прежнему OK, однако...
 ans  =
  F

--> 1 > complex(1,1)  // => ошибка: комплексные числа не упорядочены
at line    11 of function %s_2_s ( SCI\modules\overloading\macros\%s_2_s.sci line 23 )
Комплексные числа не поддерживаются. Пожалуйста, определите %s_2_s_custom() или проверьте свой код.

Сравнения с полиномами и рациональными числами:

p = 0*%s
p == 0
r = p/(1+0*%s)
r == 0
r == p
ps = (1-%s)^2, pz = (1-%z)^2
ps == pz  // => %F : требуются одни и те же переменные
--> p = 0*%s
 p  =
   0

--> p == 0
 ans  =
  T

--> r = p/(1+0*%s)
 r  =
   0
   --
   1

--> r == 0
 ans  =
  T

--> r == p
 ans  =
  T

--> ps = (1-%s)^2, pz = (1-%z)^2
 ps  =
             2
   1  -2s +s
 pz  =
             2
   1  -2z +z

--> ps == pz  // => %F : требуются одни и те же переменные
 ans  =
  F

Сравнения с разрежёнными числовыми матрицами: все поэлементные сравнения выдают разрежённый результат, в противном случае %F.

sp = sparse([0 1 0 0 -2 0 4 0 0])
sp < 0
sp == 1
sp >=       [2 3 -1 2 -4 0 3 1 0]
sp == %i
sp == list(3) // => %F
--> sp = sparse([0 1 0 0 -2 0 4 0 0])
 sp  =
(  1,  9) sparse matrix
(  1,  2)     1.
(  1,  5)    -2.
(  1,  7)     4.

--> sp < 0
 ans  =
(  1,  9) sparse matrix
(  1,  5)   T

--> sp == 1
 ans  =
(  1,  9) sparse matrix
(  1,  2)   T

--> sp >= [2 3 -1 2 -4 0 3 1 0]
 ans  =
(  1,  9) sparse matrix
(  1,  3)   T
(  1,  5)   T
(  1,  6)   T
(  1,  7)   T
(  1,  9)   T

--> sp == %i
 ans  =
(  1,  9)False sparse matrix

--> sp == list(3)  // сравнение объектов => сжатая %F
 ans  =
  F

Сравнения между графическими идентификаторами:

plot2d()
e1 = gce();
e2 = e1;    // точки e1 и e2 на оодном и томже графическом объекте
e2.tag
e1.tag = "3 curves";
e1 == e2
e2.tag
--> e2.tag
 ans  =

--> e1.tag = "3 curves";
--> e1 == e2
 ans  =
  T

--> e2.tag
 ans  =
 3 curves

Возможны сравнения псевдонимов функций:

sine = sin ;
sine == sin
синус = sind ;
синус == sind
синус(0:90:360)
--> sine = sin ;
--> sine == sin
 ans  =
  T

--> синус = sind ;
--> синус == sind
 ans  =
  T

--> синус(0:90:360)
 ans  =
   0.   1.   0.  -1.   0.

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

  • меньше — (<) сравнение "меньше, чем"
  • больше
  • boolean — Объекты Scilab'а, логические переменные и операторы & | ~
  • isequal — comparison of objects

История

ВерсияОписание
6.0
  • ~ (отрицание) сейчас имеет приоритет выше, чем у операций сравнения (== ~= < <= >= >).
  • Комплексные числа с нулевой мнимой частью теперь сравниваются как вещественные числа.
Scilab Enterprises
Copyright (c) 2011-2017 (Scilab Enterprises)
Copyright (c) 1989-2012 (INRIA)
Copyright (c) 1989-2007 (ENPC)
with contributors
Last updated:
Thu Feb 14 15:04:47 CET 2019