python中整型不用担心溢出,因为python理论上可以表示无限大的整数,直到把内存挤爆。而无穷大在编程中常常需要的。比如,从一组数字中筛选出最小的数字。一般使用一个临时变量用于存储最后结果,变量去逐个比较和不断地更新。而这临时变量一般要初始无穷大或者去第一个元素的值。
正无穷大与负无穷大
python中并没有特殊的语法来表示这些值,但是可以通过
float()
来创建它们:
>>> a = float("inf")
>>> b = float("-inf")
为了测试这些值的存在,使用 math.isinf()
进行判断:
>>> import math
>>> math.isinf(a)
>>> math.isinf(b)
无穷大数在执行数学计算的时候会传播
这个就类似于数学中讲述的,无穷大加上一个常数还是无穷大,无穷大与无穷大相等:
>>> a = float('inf')
>>> a + 45
>>> a * 10
>>> 10 / a
>>> float("inf") == float("inf")
无穷大在比较中比任何一个数都要大。
正无穷与负无穷相加的结果是什么
有些操作时未定义的并会返回一个 NaN
结果:
>>> a = float('inf')
>>> b = float('-inf')
>>> a + b
表示非数字的 NaN
nan
值在所有操作中也会传播,并且不会产生异常:
>>> c = float('nan')
>>> c + 23
>>> c / 2
>>> c * 2
>>> math.sqrt(c)
使用 math.isnan()
可以判断值是否是 NaN
:
>>> math.isnan(c)
nan
值的任何比较操作都是返回 False
:
>>> float("nan") == float("nan")
False
False
更安全的类型转换
由于无穷的存在,因此字符串装浮点数就存在的一些例外,并且这个转换过程不会抛出异常。如果程序员们想改变 python 的默认行为,可以使用 fpectl
模块,但是它在标准的Python 构建中并没有被启用,它是平台相关的,并且针对的是专家级程序员。这里提供一个比较简单的转换,就是加一个 isdigit()
判断:
def str2float(ss):
if not ss.isdigit():
raise ValueError
return float(ss)
sss = "inf"
a = str2float(sss)
float('inf') 表示正无穷-float('inf') 或 float('-inf') 表示负无穷其中,inf 均可以写成 Inf 起步python中整型不用担心溢出,因为python理论上可以表示无限大的整数,直到把内存挤爆。而无穷大在编程中常常需要的。比如,从一组数字中筛选出最小的数字。一般使用一个临时变量用于存储最后结果,变量去逐个比较和不断地更新。而这临时变量一...
在做一个把 matlab 脚本改成 python 的代码,matlab 的无穷大可以直接用 inf 来表示,无穷小可以用 -inf ,但是 Python 中无法直接使用,需要用 float("inf"),简要记录一下
minDiff = INF
minDiff = inf
错误提示:未解析的引用 INF,未解析的引用 inf
对这个数组进行统计首先需要忽略存在的空值和无穷值,空值可通过np.nan+函数的方式忽略,如np.min()→np.nanmean()
所以可以将数组里面的无穷值转为空值
data[np.isinf(data)]=np.nan
然后就可以计算数组的最大最小值、平均数、百
inf 均可以写成 Inf
python中整型不用担心溢出,因为python理论上可以表示无限大的整数,直到把内存挤爆。而无穷大在编程中常常需要的。比如,从一组数字中筛选出最小的数字。一般使用一个临时变量用于存储最后结果,变量去逐个比较和不断地更新。而这临时变量一般要初始无穷大或者去第一个元素的值。
参考C/C++,int不管是32、64、128都是有明确的范围大小的。
因为CPU内部的数字是二进制,用一定的位长的表示一个数
比如8位: 1111 1111 能表示的最大的数就是
2^9 - 1 = 511 1 0000 0000 - 1
另外CPU其实没有减法器,只有加法器,只能表示两个数相加,超过位数就会溢出。
比如两个4位的数相加:
1001+1100 正确的结果是 10101 对应十进制数是21,
要证明$arcsin(x)$与$x$等价无穷小,首先需要知道它们的定义。
$arcsin(x)$表示反正弦函数。即,当$-\frac{\pi}{2} \leq x \leq \frac{\pi}{2}$时,$arcsin(x)$满足$\sin(arcsin(x))=x$ 。
而$x$是一个变量,可以看做是在$0$附近变化的。
我们可以将$arcsin(x)$展开成泰勒级数的形式:
$$arcsin(x) = x + \frac{1}{2} \cdot \frac{x^3}{3} + \frac{1 \cdot 3}{2 \cdot 4} \cdot \frac{x^5}{5} + \cdots$$
这个级数是可求和的,我们可以把它写成:
$$arcsin(x)=\sum_{n=0}^{\infty} \frac{(2n)!}{4^n (n!)^2 (2n+1)} x^{2n+1} $$
接下来,我们考察$x$在$0$附近的表现。为了证明两者等价无穷小,需要证明在$x \to 0$时,$arcsin(x)$的阶数与$x$相同,并且系数存在有限极限。
观察刚刚展开的泰勒级数,我们可以看到,最低阶的项为$x$。同时,所有的高阶项都包含了$x$的幂。因此,$arcsin(x)$的阶数与$x$相同,且系数存在有限极限。
因此,我们可以得到结论,$arcsin(x)$与$x$等价无穷小。即:
$$\lim_{x \to 0} \frac{arcsin(x)}{x} = 1$$