作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何检查数字是否无理数?我们输入一个无理数并仅使用标准 std 库。
最佳答案
全部floating-point numbers可以用 x = significand × 2<sup>exponent</sup>
的形式表示,其中significand
和exponent
是整数。根据定义,所有这些数字都是有理数。这就是为什么这个问题只有一个近似解。
一种可能的方法是将数字扩展为连分数。如果遇到非常小的分母或零,则输入数字近似有理数。或者,更好的是,如果所有分母都不小,那么该数字近似无理数。
粗略的想法:
bool is_rational(double x) {
x = std::abs(x);
for (int i = 0; i < 20; ++i) {
const auto a = std::floor(x);
if (x - a < 1e-8)
return true;
x = 1 / (x - a);
}
return false;
}
int main() {
std::cout << std::boolalpha;
std::cout << is_rational(2019. / 9102.) << std::endl; // Output: true
std::cout << is_rational(std::sqrt(2)) << std::endl; // Output: false
}
人们应该考虑 is_rational()
中魔数(Magic Number)的最佳选择。 .
关于c++ - 如何检查一个数字是否无理数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58973526/
我有一道数学题。我有一个无理数 BigDecimal,我想对其进行四舍五入,但是我想在它开始重复之后对其进行四舍五入(如果有意义的话)。例如,如果我有 0.7648951214714714714714
我是一名优秀的程序员,十分优秀!