(?2022-09-30 00:28:51 编辑完的,雪藏了很久,今天有时间了,把浮点数除法搜来补上)
上周地图经纬度出的bug搞得我精疲力竭,总是莫名其妙的就点就飞到不知道哪里去了。qt版本又旧没有isNan函数,愣是找了2天多。最后发现是double数据传递给float出问题了。
软件搭架子的工作多了,数值计算这里的经验都空白了,索性记录一下。
除零中断:
一般出现这个代表非法浮点运算
nan: not a number,表示“无效数字”。
如果表达式中含有nan,那么表达式的结果为nan
一般出现这个代表结果溢出
INF:infinite,表示“无穷大”。
超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。
+inf大于任何数(除了它自己和nan),-inf小于任何数(除了它自己和nan),得到inf时就查看是否有溢出或者除以0。inf在C语言表达式中就表示数学里无限的概念,如1.0/inf等于0.0,并可以与其他浮点数进行比较的(可以参与<=、>+、==、!=等运算)。
这里为了跨平台,我只介绍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或乱码,深究_超自然祈祷的博客-CSDN博客_c语言输出为0.0000
计算机组成原理的浮点表示:
(——以下截图在慕课截取的)
1-阶码运算
2-尾数运算
3-尾数规格化
4-舍入
5-溢出判断
2.浮点除法运算规则
浮点除法这玩意好像很复杂,随便找找的都是略过……
部分参考: