c++ - 为什么将 1 添加到 numeric_limits::min() 返回 1?
问题描述
为什么从 float max 中减去 1 会返回一个合理的值,但将 float min 加 1 会返回 1?
我认为如果你添加或减去一个小于那个特定量级的 epsilon 的值,那么什么都不会发生,也不会增加或减少。
这是我用 g++ 编译的没有标志并在 x86_64 上运行的代码。
#include <limits>
#include <iostream>
int main() {
float min = std::numeric_limits<float>::min() + 1;
float max = std::numeric_limits<float>::max() - 1;
std::cout << min << std::endl << max << std::endl;
return 0;
}
输出这个:
1
3.40282e+38
我希望它输出这个:
-3.40282e+38
3.40282e+38
解决方案
std::numeric_limits<float>::min()
返回最小的标准化正值。要获取没有低于它的值的值,请使用std::numeric_limits<float>::lowest()
.
推荐阅读
- flutter - 带有 Flutter 的 Android 工作室。如何正确设置?
- flask - Google App Engine (GAE) 基本扩展后端实例服务一个请求并取消部署
- mysql - GROUP_CONCAT 多个字段在 ARRAY 中具有不同的分隔符
- macos - SwiftUI Image 不显示现有文件中的图像
- java - 如何调查 Apache Camel Route 上的数据?
- r - 如何根据 R 中另一个列表的内容将区域分配给一个列表?
- python - 可以使用 Python 相对导入以特定名称导入当前模块的 __init__ 文件吗?
- pip - pipenv 和 pip 之间的链接
- css - 溢出:没有导致容器边缘像素化
- java - 如何在 kotlin 或 java 中为 yamnet.tflite 模型准备 .amr 或 .wav 文件