Я хочу вычислить, «какую мощность числа, которую я должен использовать», с фиксированной базы, например. 2.Haskell: Преобразование Double to Int
Я хочу найти следующую (целую) мощность числа, например. 2^3 = 8 ==> get2Power 8 ==> 3
.
Это просто, но get2Power 10 ==> 4
так 2^3=8
как нижняя граница и 2^4=16
как верхняя граница, я хочу, чтобы вернуть верхний один, 4
.
С простой математикой Я знаю, что могу вычислить мощность с помощью некоторой функции логарифма, то есть log(x)/log(2)
, что приводит к удвоению. Но я хочу иметь следующий Integer
.
Мой подход выглядит
get2Power :: Integer -> Integer
get2Power x
| x <= 0 = -1
| otherwise = round (log(x)/log (2))
которая не причина есть отсутствуют некоторые преобразования между типами. Сообщение об ошибке не помогает получить представление о том, чего я не вижу.
Может ли кто-нибудь дать мне руку помощи о том, как преобразовать результат Double в Integer/int?
ТНХ, BUTTTT .... Подход с usedBits звучит замечательно, но я не заинтересован в этом образце в рекурсивном решении (хотя код хорошо;)) , Код для get2Power не решает проблему с преобразованием 'Integer', а именно' 2^(get2Power 10) 'не работает, т. Е. Я не могу использовать результат get2Power для дальнейших вычислений. (Возможно, непонятно с самого начала, но ...) – LeO
@LeO с вашей исходной функцией вы можете сделать '2^(get2Power (-5))', но не правильно !, вы должны узнать о 'Maybe'. Я написал пример использования: – josejuan
«... мне неинтересно ... в рекурсивном решении ...», не является рекурсивным! :) – josejuan