C++ boost 理性类,floor 函数

标签 c++ boost floor

我刚开始使用 boost。

除了简单地执行 x.numerator()/x.denominator 之外,在使用 boost rational 库时是否有适当的“boost 类型”方式来调用 floor(x) 函数(即截断为零)?

谢谢

最佳答案

没有。我仔细研究了它,唯一一个甚至处理转换为连续分数表示的函数从完全相同的操作开始(为了易读而格式化):

struct {
    Rat::int_type n, d, q, r;
} ts = {
    l.numerator(), l.denominator(),
    static_cast<Rat::int_type>(l.numerator() / l.denominator()), static_cast<Rat::int_type>(l.numerator() % l.denominator()) 
},
  rs = {
      r.numerator(), r.denominator(),
      static_cast<Rat::int_type>(r.numerator() / r.denominator()), static_cast<Rat::int_type>(r.numerator() % r.denominator()) 
};

虽然这可能会让您有些失望,但它确实验证了您的方法,这很好。

如果您愿意,可以提供自己的 floor 重载,以便通过 ADL 找到 ¹

这是我的通才建议,假设您将其注入(inject)命名空间 boost:

namespace boost {
    template <typename IntType>
    constexpr IntType floor(rational<IntType> const& r) {
        return static_cast<IntType>(r.numerator() / r.denominator());
    }
}

现场演示

Live On Coliru

#include <boost/rational.hpp>

namespace boost {
    template <typename IntType>
    constexpr IntType floor(rational<IntType> const& r) {
        return static_cast<IntType>(r.numerator() / r.denominator());
    }
}

#include <iostream>

template <typename IntType> void test()
{
    boost::rational<IntType> a(230,7), b(222*111111,-777777);

    std::cout << "a: " << a << " -> " << floor(a) << "\n";
    std::cout << "b: " << b << " -> " << floor(b) << "\n";
}

#include <boost/multiprecision/cpp_int.hpp>
int main() {
    test<int>();
    test<boost::multiprecision::cpp_int>();
}

打印

a: 230/7 -> 32
b: -222/7 -> -31
a: 230/7 -> 32
b: -222/7 -> -31

¹ 在声明整数类型的命名空间中声明它,或者在命名空间 ::boost 中声明它,以便让它启动。

关于C++ boost 理性类,floor 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971827/

相关文章:

c++ - 具有可变地形的 2D 静态盒碰撞

c++ - 有谁知道 endl(cout) 和 cout << endl 之间的区别?

c++ - 将 unique_ptr 引用传递给 boost::bind?

c - 将 ceil 的结果转换为整数是否安全?

C++ 无法打开源文件 "opencv2/tracking.hpp"

android - 如何保持发布版本的断言活跃

c++ - boost::deadline_timer::async_wait 不是异步的

c++ - 构造函数失败后初始化 boost::asio 套接字

Java整数除法不为负数提供下限

Sympy 偶数和奇数的分段表达式