Я просто хотел отметить, что все представленные методы проверяют, является ли входное значение гауссовым целым , что означает, что действительная и мнимая части являются обеими целыми числами.Если вам нужно позаботиться о мнимой части, то вам нужно разобраться с ней отдельно.
Для моих приложений входные данные с мнимыми компонентами не должны рассматриваться как допустимое целое число, поэтому у меня есть следующее:
function boolResult = fnIsInteger(input)
%validate input
if isempty(input)
error('Input cannot be empty')
elseif ~isnumeric(input)
error('Input must be numeric')
end
boolResult = (imag(input) == 0) & (round(input) == input);
end
Использование тестов b3.:
>> x = rand(100000, 1);
>> tic; for ii = 1:100000; ~mod(x(ii), 1); end; toc;
Elapsed time is 0.003960 seconds.
>> tic; for ii = 1:100000; fnIsInteger(x(ii)); end; toc;
Elapsed time is 0.217397 seconds.
>> tic; ~mod(x, 1); toc;
Elapsed time is 0.000967 seconds.
>> tic; fnIsInteger(x); toc;
Elapsed time is 0.003195 seconds.
Зацикленный вызов немного медленнее, в основном из-за перегрузки функции.Замена арифметического выражения на ~ mod (dataInput, 1) сделает его только на 50% быстрее, чем код, проверяющий мнимые части.