gpt4 book ai didi

c++ - 在 C++ 中设置默认浮点打印精度

转载 作者:IT老高 更新时间:2023-10-28 22:18:04 35 4
gpt4 key购买 nike

我想在比较期间控制 double ,然后用 C++ 恢复到默认精度。

我打算使用 setPrecision() 来设置精度。那么将精度设置回默认值的语法(如果有)是什么?

我正在做这样的事情

std::setPrecision(math.log10(m_FTOL));

我做了一些事情,之后我想回到默认的双重比较。

我是这样修改的,还是有一些错误

std::streamsize prec = std::ios_base::precision();
std::setprecision(cmath::log10(m_FTOL));

with cmath 在编译时为 false,而 std::ios_base 在编译时也为 false。你能帮忙吗?

最佳答案

您可以使用 std::ios_base::precision在更改它之前获得精度,然后使用它稍后将其更改回来。

您可以通过以下方式看到这一点:

#include <ios>
#include <iostream>
#include <iomanip>

int main (void) {
double d = 3.141592653589;
std::streamsize ss = std::cout.precision();
std::cout << "Initial precision = " << ss << '\n';

std::cout << "Value = " << d << '\n';

std::cout.precision (10);
std::cout << "Longer value = " << d << '\n';

std::cout.precision (ss);
std::cout << "Original value = " << d << '\n';

std::cout << "Longer and original value = "
<< std::setprecision(10) << d << ' '
<< std::setprecision(ss) << d << '\n';

std::cout << "Original value = " << d << '\n';

return 0;
}

哪个输出:

Initial precision = 6
Value = 3.14159
Longer value = 3.141592654
Original value = 3.14159
Longer and original value = 3.141592654 3.14159
Original value = 3.14159

上面的代码展示了两种设置精度的方法,第一种是调用std::cout.precision (N),第二种是使用流操作器std::setprecision(N) .


但您需要记住,精度是针对通过流输出值的,它不会直接影响值本身与以下代码的比较:

if (val1== val2) ...

也就是说,即使输出可能是3.14159,值本身还是完整的3.141592653590(以普通 float 为准限制,当然)。

如果你想这样做,你需要检查它是否足够接近而不是相等,代码如下:

if ((fabs (val1 - val2) < 0.0001) ...

关于c++ - 在 C++ 中设置默认浮点打印精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560291/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com