Как проверить, является ли a степенью двойки - PullRequest
1 голос
/ 26 мая 2020

Я хотел бы знать, есть ли эффективный способ узнать, являются ли значения моего столбца в моем фрейме данных степенью двойки. Мои данные - это фрейм данных с 6 столбцами, в одном из столбцов есть значения, которые я хочу проверить, соответствуют ли числа степени 2.

class(df$doubling_times) > numeric

1 Ответ

7 голосов
/ 26 мая 2020

log2(x) %% 1 == 0 - проверяет, является ли логическая база 2 числа целым (при делении на 1 остаток равен 0?)

> x = 1:10
> data.frame(x, power2 = log2(x) %% 1 == 0)
    x power2
1   1   TRUE
2   2   TRUE
3   3  FALSE
4   4   TRUE
5   5  FALSE
6   6  FALSE
7   7  FALSE
8   8   TRUE
9   9  FALSE
10 10  FALSE

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

remainder = log2(x) %% 1
tol = 1e-12 # tolerance
power2 = abs(remainder - round(remainder)) < tol
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...