проверка целочисленного квадратного корня в R

Как с помощью R проверить, является ли квадратный корень числа целым числом?

Следующие ниже все оценивают как FALSE.

is.integer( sqrt(25) )
is.integer( sqrt(25L) )

person Bastiaan Quast    schedule 10.06.2015    source источник
comment
извините, я не видел этого вопроса, моя ошибка   -  person Bastiaan Quast    schedule 10.06.2015


Ответы (1)


Хорошо, я нашел способ обойтись, но не уверен, что он эффективен или даже надежен для использования более экзотических чисел.

25 %% sqrt(25) == 0

Оценивает до TRUE.

Возможно, лучший способ сделать это:

sqrt(25) %% 1 == 0

Что также оценивается как TRUE. По материалам этого ответа.

person Bastiaan Quast    schedule 10.06.2015
comment
Вы должны проверить ?is.integer, особенно функцию is.wholenumber, определенную в разделе "Примеры". - person ; 10.06.2015
comment
если ваш квадратный корень не является целым числом, тогда вы будете делать целочисленное dvision с нецелым числом, что не является хорошей идеей, и если это целое число, определение квадратного корня таково: sqrt (k) * sqrt (k) == k так что это всегда будет ИСТИНА. Извините, но я должен проголосовать против этого очень неправильного ответа. @Pascal, почему ты удалил свой ответ? - person Cath; 10.06.2015
comment
спасибо @Pascal Я просмотрел пример is.wholenumber, но не подумал, что это было очень ясно или именно то, что я искал. - person Bastiaan Quast; 10.06.2015
comment
@CathG, спасибо, я не совсем согласен с вами, из документации R %% and x %/% y can be used for non-integer y, e.g. 1 %/% 0.2,. Однако я обновил свой ответ альтернативой, в которой используется 1. - person Bastiaan Quast; 10.06.2015
comment
@CathG Я не понимаю утверждения, что число всегда будет 0 по модулю квадратного корня. Я могу понять, что это правда, только когда результат является целым числом. 3 %% sqrt(3) не равно 0, и если квадратный корень не является целым числом, он не может дать модулю 0 для своего квадрата, так как его нужно умножить на другое нецелое число (т.е. будет иметь остаток). Я что, глупый? - person ping; 10.06.2015
comment
верно, хороший момент, я тупо думаю об умножении целых чисел на целые числа, у меня есть математический опыт, и мне кажется, что моя голова не хочет представить, что мы можем делать %% с не целыми числами ........... . ;-) - person Cath; 10.06.2015
comment
@bquast, да, могут, но результаты могут быть ошибочными, и это математически неверно ... также попробуйте sqrt(8+1/3+1/3+1/3) %% 1 == 0 или (8+1/3+1/3+1/3)%%sqrt(8+1/3+1/3+1/3) - person Cath; 10.06.2015