解析搜索引擎掉入黑洞风险:无限循环与浮点数异常处理

创始人
2024-12-31 04:37:04
0 次浏览
0 评论

让搜索引擎掉入黑洞的风险怎么理解?

在计算机编程中,陷入黑洞是指陷入无限循环中。
例如C中的无限循环:#includemain(){while(1){printf("InfiniteLoop\n");//显示字符串“InfiniteLoop”}}上面的程序总是会显示字符串“无限循环”。
所以让一个搜索引擎陷入黑洞,就意味着让控制搜索引擎变量参数的代码程序陷入无限循环。

C语言1/0和1/0.0的问题

计算机在存储浮点数方面并不准确,因此判断一个值是否为0的方法是制定一个0.000001的数字,然后用它来判断它是否大于-0.000001和小于0.000001。
浮点数0是一个很小的数,但不是0。
这不会导致被零除的错误

一个简单的c语言程序,输出-1.#IND00..不知道哪里错

在对浮点数进行编程时,如果不注意,经常会出现1.#IND、1.#INF或nan,inf等奇怪的输出。
这通常意味着浮点运算的例外。
特殊浮点数的含义1.#INF/inf:该值的意思是“无穷大(infinity的缩写)”,即超出了计算机能够表示的浮点数的最大范围(或者说超出了浮点数的最大范围)计算机可以表示的浮点数(或超出计算机可以表示的浮点数的最大范围)的double类型的值)。
一个整数除以0,你会得到一个值1.#INF/inf;因此,如果你一个负整数除以0,你会得到一个值-1.#INF/-inf;这种情况一般比较复杂。
简单地说,它们来自任何具有未定义(非法)结果的浮点运算,“IND”是“未确定”的缩写,“nan”是。
notanumber的缩写。
生成该值的常见示例包括:取负数的平方根、取负数的对数、0.0/0.0、0.0*∞、∞/∞等。
总之,如果遇到1.#INF/inf,请检查运算结果是否溢出并被零除。
如果遇到1.#IND/nan,请检查是否存在非法操作。
判特殊浮点数许多C库提供了一组函数来确定浮点数是无穷大还是NaN。
int_isnan(doublex)函数用于判断浮点数是否为NaN,int_finite(doublex)函数用于判断浮点数是否为无穷大。
您可能已经注意到,上面的两个函数都以下划线开头,因此可能存在可移植性问题。
那么如何实现通用判断版本呢?首先,对于Nan,可以使用如下代码来实现:boolIsNumber(doublex){//这里的比较操作似乎总是为true//但是有趣的是,对于IEEE754浮点数NaN,它总是得到false!return(x==x);}并且以下代码可以确定浮点数如果点数是有限的(有限的,即既不是NaN也不是无限的):boolIsFiniteNumber(doublex){return(x<=DBL_MAX&&x>=-DBL_MAX);}其中,DBL_MAX是中预定义的常量。
通过上面两个函数的组合,还可以判断一个浮点数是否为Inf。
热门文章
1
JSF架构解析与Java学习资源分享:J... JavaServerFacesJSF体系结构JavaServerFaces(JS...

2
数据结构C语言版深度解析与C语言入门很简... 《数据结构(C语言版)》.严蔚敏吴伟民著.pdf在《数据结构(C语言版)》一书中...

3
C语言字符串常量解析:区别、用途及存储方... 什么是字符串常量字符串常量是C语言中的一种数据类型,它是由一对双引号括起来的字符...

4
C语言printf函数:格式字符串与输出... printf函数中的格式与输出项有什么关系?在C语言中,printf函数中的格式...

5
Excel技巧:计算字符串起始位置与合并... 如何计算字符串在特定文本中的起始位置,怎么计算字符串在特定文本中的起始位置您可以...

6
Python发音全解:掌握正确的发音方法... python怎么读我的很多学习编程的朋友可能都知道Python这个词,但是他们中...

7
字符与字符串:编程中的基础文本类型解析 字符串什么意思字符串是由数字、字母和下划线组成的字符串,表示为s=“a1a2…a...

8
Python编程语言:多领域应用与开发优... Python的作用是什么?Python是一种跨平台计算机编程语言,是ABC语言的...

9
深度解析:C语言编程特点与应用领域 什么叫c语言C语言是一种编程语言。C编程语言应用广泛,具有以下特点和特点:1.语...

10
Java全解析:跨平台编程语言的魅力与多... java是什么Java是一种功能强大的编程语言,被称为“一次编写,随处运行”模型...