Advertisement
Dukales

constexpr integer logarithm

May 25th, 2015
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.23 KB | None | 0 0
  1. #include <cstdlib>
  2.  
  3. template< std::size_t argument, std::size_t base = 2, bool = (argument < base) >
  4. constexpr std::size_t log = 1 + log< (argument / base), base >;
  5.  
  6. template< std::size_t argument, std::size_t base >
  7. constexpr std::size_t log< argument, base, true > = 0;
  8.  
  9. static_assert(log< 1, 2 > == 0);
  10. static_assert(log< 2, 2 > == 1);
  11. static_assert(log< 3, 2 > == 1);
  12. static_assert(log< 4, 2 > == 2);
  13. static_assert(log< 5, 2 > == 2);
  14. static_assert(log< 6, 2 > == 2);
  15. static_assert(log< 7, 2 > == 2);
  16. static_assert(log< 8, 2 > == 3);
  17. static_assert(log< 15, 2 > == 3);
  18. static_assert(log< 16, 2 > == 4);
  19. static_assert(log< 1024, 2 > == 10);
  20.  
  21. static_assert(log< 1, 3 > == 0);
  22. static_assert(log< 2, 3 > == 0);
  23. static_assert(log< 3, 3 > == 1);
  24. static_assert(log< 4, 3 > == 1);
  25. static_assert(log< 8, 3 > == 1);
  26. static_assert(log< 9, 3 > == 2);
  27. static_assert(log< 10, 3 > == 2);
  28. static_assert(log< 26, 3 > == 2);
  29. static_assert(log< 27, 3 > == 3);
  30. static_assert(log< 28, 3 > == 3);
  31. static_assert(log< 80, 3 > == 3);
  32. static_assert(log< 81, 3 > == 4);
  33. static_assert(log< 82, 3 > == 4);
  34.  
  35. static_assert(log< 1, 10 > == 0);
  36. static_assert(log< 10, 10 > == 1);
  37. static_assert(log< 100, 10 > == 2);
  38. static_assert(log< 1000, 10 > == 3);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement