首页 > 编程语言 >C++的nan、inf

C++的nan、inf

时间:2023-12-24 19:32:06浏览次数:43  
标签:返回 int nan C++ 浮点 inf 除法


( 2022-09-30 00:28:51 编辑完的,雪藏了很久,今天有时间了,把浮点数除法搜来补上)

上周地图经纬度出的bug搞得我精疲力竭,总是莫名其妙的就点就飞到不知道哪里去了。qt版本又旧没有isNan函数,愣是找了2天多。最后发现是double数据传递给float出问题了。

软件搭架子的工作多了,数值计算这里的经验都空白了,索性记录一下。

〇、int型就不会出现这些,直接崩溃……

除零中断:

C++的nan、inf_浮点数

一、nan

一般出现这个代表非法浮点运算

nan: not a number,表示“无效数字”。

如果表达式中含有nan,那么表达式的结果为nan

二、INF

一般出现这个代表结果溢出

INF:infinite,表示“无穷大”。

超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。

+inf大于任何数(除了它自己和nan),-inf小于任何数(除了它自己和nan),得到inf时就查看是否有溢出或者除以0。inf在C语言表达式中就表示数学里无限的概念,如1.0/inf等于0.0,并可以与其他浮点数进行比较的(可以参与<=、>+、==、!=等运算)。

三、Qt中识别nan和inf的函数

这里为了跨平台,我只介绍qt的函数

    int isfinite(x) ,判断x是否有限,是返回1,其它返回0;
    int isnormal(x),判断x是否为一个数(非inf或nan),是返回1,其它返回0;
    int isnan(x),当x时nan返回1,其它返回0;
    int isinf(x) ,当x是正无穷是返回1,当x是负无穷时返回-1,其它返回0。有些编译器不区分。
 

四、浮点表示,解析以上原因

这里有一篇我之前写的博客内容详细数字类型的输出: 

c语言输出0.000000或乱码,深究_超自然祈祷的博客

计算机组成原理的浮点表示:

C++的nan、inf_浮点除_02

浮点除法:

  • 除数为0,被除数不为0: 结果为无穷大。在IEEE 754标准下就是阶码全为1,尾数全为0。
  • 除数被除数都为0:结果是NAN(not a number)。在IEEE 754标准下阶码全为1,尾数非0。

(——以下截图在慕课截取的)

1.运算步骤:

1-阶码运算

2-尾数运算

3-尾数规格化

4-舍入

5-溢出判断

2.浮点除法运算规则

C++的nan、inf_浮点数_03

3.浮点乘法运算举例(除法类似)

C++的nan、inf_c++_04

浮点除法这玩意好像很复杂,随便找找的都是略过……

部分参考:

C、C++中出现nan、inf原因_LaugustusJ的博客

 C语言中的nan和inf 的判断和使用_大作家佚名的博客


标签:返回,int,nan,C++,浮点,inf,除法
From: https://blog.51cto.com/u_11347864/8956816

相关文章

  • C++ Qt开发:如何使用信号与槽
    在Qt中,信号与槽(SignalandSlot)是一种用于对象之间通信的机制。是Qt框架引以为傲的一项机制,它带来了许多优势,使得Qt成为一个强大且灵活的开发框架之一。信号与槽的关联通过QObject::connect函数完成。这样的机制使得对象能够以一种灵活而松散耦合的方式进行通信,使得组件之间的交互......
  • [Bookmark]-C/C++
    C++类成员函数的函数指针sprintf与printf源码分析printf源码C语言实现简单的printf功能C中printf函数的实现原理TheGNUCLibraryglibc-printfC语言中的pow函数使用方法及注意事项,和常见报错原因,且分享实战中的使用注:仅用于记录使用过程中涉及的相关文档。......
  • 软件测试/测试开发|Docker+Jmeter+InfluxDB+Grafana 搭建性能监控平台
    为什么要搭建性能监控平台?1.1需求背景在用Jmeter获取性能测试结果的时候,Jmeter本身带有聚合报告如下图所示:这个报告有几个很明显的缺点:只能自己看,无法实时共享;报告信息的展示比较简陋单一,不直观;1.2需求方案为了解决上述问题,必须要请出了InfluxDB+Grafana:InfluxDB:持续型......
  • Navicat 下查看 rollback_info
    Navicat下查看rollback_info1.右键复制2.Json格式化【前置镜像:beforeimage、后置镜像:afterimage】{"@class":"io.seata.rm.datasource.undo.BranchUndoLog","xid":"192.168.194.1:8091:2157140837","branchId":......
  • SciTech-Python-编译Python的C/C++扩展的setup.py
    https://github.com/google-deepmind/tree/setup.py"""Setupforpippackage."""importos,platform,sys,sysconfig,shutil,subprocess,setuptoolsfromsetuptools.commandimportbuild_exthere=os.path.dirname(os.path.abspath......
  • C++零基础教程(什么是多态)
    (文章目录)前言本篇文章来给大家讲解一下C++中的多态,学习多态是了解C++特性必不可少的。一、多态的概念多态(Polymorphism)是面向对象编程中一个重要的概念,它允许基于对象的实际类型来调用相应的方法,以实现更灵活和可扩展的代码。在C++中,多态通常通过虚函数(VirtualFunction)和......
  • C++ 内联函数
    @TOC前言内联函数(InlineFunctions)是C++中一个重要的编程概念,它允许开发者在代码中使用一种特殊的方式来声明和定义函数,以提高程序的性能和可维护性。本文将详细讨论C++中的内联函数,包括如何定义、为何使用、以及其潜在优缺点。1.内联函数的基本概念内联函数是一种特殊的C++函数,通......
  • C++(引用符号&、访问内存地址&)
    在C++中,引用符号&和访问内存地址的&运算符有不同的用途和含义。引用符号&:创建引用使用&符号可以创建引用,即给一个变量起一个别名。引用是一个别名,它与原变量共享相同的内存地址。引用在声明时必须初始化,并且一旦初始化后,不能再引用其他变量。intx=10;int&ref......
  • c++智能指针和java垃圾回收对比
    c++智能指针和java垃圾回收对比我们都知道C++和java语言的一个巨大差异在于垃圾回收方面,这也是C++程序开发者和java程序开发者之间经常讨论的一个话题。在C++语言中,一般栈上的内存随着函数的生命周期自动进行回收,但是堆上内存(也就是自己new/malloc出来的空间),需要自己手动进行del......
  • 强化学习算法真的适合于你的应用吗 —— 强化学习研究方向(研究领域)现有的不足(短板、
    外文原文:WhyYou(Probably)Shouldn’tUseReinforcementLearning地址:https://towardsdatascience.com/why-you-shouldnt-use-reinforcement-learning-163bae193da8中文翻译版本(ChatGPT3.5翻译:)有关这项技术存在很大的炒作,而且理由充分,因为这可能是实现通用人工智能的......