c - 为什么浮点数不会溢出到无穷大
问题描述
假设我们有以下代码:
float f = 999999999999*9999999999999999*999999999999; //a large number to make it overflow
但是我检查了结果的位表示,它不是无穷大,是其他的,怎么会?
解决方案
中的所有值999999999999*9999999999999999*999999999999
都不是浮点数,因此您没有进行浮点运算。事实上,即使没有设置任何额外的警告选项,gcc 也会为您的代码提供此警告(clang 提供类似的警告):
warning: integer overflow in expression of type 'long int' results in '4467987020393345025' [-Woverflow]
改为这样做
float f = 999999999999.0f*9999999999999999*999999999999;
printf("%f\n", f);
输出:
inf
将第一个文字设为浮点数会强制进行浮点运算,因此您可以获得所需的无限值。
推荐阅读
- c++ - 如何在for循环c ++中将变量放在用户输入的整数前面
- mongodb - 使用spring boot将大量数据从一个集合复制到Mongodb中的另一个集合
- angular - NGRX-Entity-Relationship Graph 没有收到选择器
- mongodb - 如何将 Eclipse 同上连接到 mongodb 云
- asp.net - ASP.NET 4 - 如何在 SQL 中为数据库生成 asp.net 身份架构?
- c# - 如何使用 Cefsharp Winform 共享屏幕?
- jquery - 通过 npm 安装包时如何导入/需要 slim 版本?
- javascript - 从 ASCII 数组中获取总和
- postgresql - 为什么我的 postgreSQL 查询没有从我的表中找到正确的对象?
- macos - SwiftUI NSTitlebarAccessoryViewController