【发布时间】:2026-01-10 06:30:01
【问题描述】:
我想将浮点数的最小可能值添加到浮点数。因此,例如,我尝试这样做以获得 1.0 + 可能的最小浮点数:
float result = 1.0f + std::numeric_limits<float>::min();
但这样做之后,我得到以下结果:
(result > 1.0f) == false
(result == 1.0f) == true
我使用的是 Visual Studio 2015。为什么会发生这种情况?我能做些什么来绕过它?
【问题讨论】:
-
你为什么感到惊讶?您添加的是 min,而不是 epsilon。
-
我没有意识到有区别!我曾假设它们总是等价的。谢谢,这很有帮助。
-
@Matteo 回答?我对这个问题没有确切的理由。
-
float的最小正值比 1 小 38 个数量级,为 1.175e-38。float类型只提供六位精度,因此将最小值加到 1 就等于加零。
标签: c++ c++11 floating-point