gpt4 book ai didi

c++ - std::scientific 是否总是导致 float 的规范化科学计数法?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:33:54 25 4
gpt4 key购买 nike

科学记数法定义了数字应该如何使用符号、数字和指数来显示,但它没有声明可视化是标准化的。

一个例子:-2.34e-2(归一化科学计数法)与-0.234e-1(科学计数法)相同

我能否依赖以下代码始终生成规范化结果?编辑:答案中指出的 NAN 和 INF 除外。

template<typename T>
static std::string toScientificNotation(T number, unsigned significantDigits)
{
if (significantDigits > 0) {
significantDigits--;
}
std::stringstream ss;
ss.precision(significantDigits);
ss << std::scientific << number;
return ss.str();
}

如果是,请列出 C++ 文档/标准中的一个部分,说明它不是平台/实现定义的。由于 0 的值也有不同的表示方式,我担心某些非常小的数字(非规范化?!)可能会以不同的方式可视化。在我的编译器平台上,它目前适用于 std::numeric_limits::min()、denorm_min()。

注意:我使用它来查找数字的数量级,而不会弄乱 float 分析的所有古怪细节。我希望标准库为我做这件事 :-)

最佳答案

Can I rely on the following code always producing the normalized outcome?

没有任何保证,不。更好的说法是:标准并没有像您希望的那样强加保证。

std::scientific 仅在以下相关部分被引用:

  1. [floatfield.manip]:2

    ios_base& scientific(ios_base& str);  

    Effects: Calls str.setf(ios_­base​::​scientific, ios_­base​::​floatfield).
    Returns: str.

  2. Table 101 — fmtflags effects

    | Element    | Effect(s) if set                                       |
    | ... | ... |
    | scientific | generates floating-point output in scientific notation |
    | ... | ... |

关于c++ - std::scientific 是否总是导致 float 的规范化科学计数法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50583676/

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