Boost.Real  1.0.0
Boost.Real numerical data type for real numbers representation using range arithmetic.
irrational_helpers.hpp
1 #ifndef BOOST_REAL_IRRATIONAL_HELPERS_HPP
2 #define BOOST_REAL_IRRATIONAL_HELPERS_HPP
3 
4 #include <vector>
5 #include <algorithm>
6 
7 namespace boost {
8  namespace real {
9  namespace irrational {
10 
18  int champernowne_binary_get_nth_digit(unsigned int n) {
19  std::vector<int> binary = {1};
20  unsigned int index = 0;
21 
22  while (index < n) {
23 
24  if (std::all_of(binary.begin(), binary.end(), [](int d) -> bool { return d == 1; })) {
25 
26  for (int i = (int)binary.size() - 1; i >= 0; i--) {
27  binary[i] = 0;
28  }
29  binary.insert(binary.begin(), 1);
30 
31  } else {
32 
33  for (int i = (int)binary.size() - 1; i >= 0; i--) {
34  if (binary[i] == 0) {
35  for (int j = (int)binary.size() - 1; j > i; j--) {
36  binary[j] = 0;
37  }
38  binary[i] = 1;
39  break;
40  }
41  }
42  }
43 
44  index += binary.size();
45  }
46 
47  return binary[binary.size() - 1 - (index - n)];
48  }
49  }
50  }
51 }
52 
53 #endif //BOOST_REAL_IRRATIONAL_HELPERS_HPP
Definition: boundary.hpp:7