《Python for Finance》之int和float类型知识点

您所在的位置:网站首页 python里面int和float 《Python for Finance》之int和float类型知识点

《Python for Finance》之int和float类型知识点

2022-09-30 10:36| 来源: 网络整理| 查看: 265

最近开始学习 Yves Hilpisch的《Python for Finance》第二版,打算找个地方记录其中一些有用或者有意思的内容,就暂时在CSDN这里开个博客,将来可能会开公众号,欢迎各位初学者一起来学习或者大神来指点一二。

今天主要有两个点。第一个是int类型。Python里的整数的储存空间根据数值大小是会产生变化的。这与C++不同(由于我之前学的主要是C++,可能之后都会两相比较)。C++里int类型的储存位数虽然也不是固定的,根据编译器可能是4个字节(32或64位编译器)也可能是2个字节(16位编译器)。这在某种意义上其实可以说是“固定”的了。

而随着储存的字节长度固定下来,int类型变量能取得的大小自然也就是有限的了,比如4个字节则int类型最大取值是231-1,可能有些非计算机专业或没学过计算机基础的人会好奇为什么不是232-1。这里简单说一下,对于有符号的int类型,其二进制形式的最高位,如果是1,对应-231,如果是0,对应0.其余各位则均表示正的,如第x位上是1,对应+2x-1,若是0,则对应0。所以32位有符号int类型最大的二进制表示是(01111111111111111111111111111111)。也就是231-1。

对于Python来说,就没有这样的限制,所以Python的int值理论上可以无限大。

a=1000000000000000000000000000000000000000000 a.bit_length()

超长整数 可以看到整数a的位数已经达到了140位。(我猜想可能这也是python某些方面运行效率会比C++差的原因之一?)

接下来是第二点,就是浮点数的精度问题。先看以下代码

b=0.35 b+1

特殊浮点数 令人惊讶的一幕出现了,怎么一个才两位的小数0.35的精度就出问题了。其实这是因为对于在0到1之间的小数,python会把它表示成 n = x 2 + y 4 + z 8 + … n=\frac{x}{2}+\frac{y}{4}+\frac{z}{8}+\ldots n=2x​+4y​+8z​+…的形式。

在这里插入图片描述 我们可以看到,由于0.5直接等于 1 2 \frac{1}{2} 21​,能很精确的存储。而0.35,其实等于 7 20 \frac{7}{20} 207​,我们预想的结果应该是(7,20),但因为存储规则,它在内部已经变形了。

对于金融市场分析来说,小数点后面的精确度有时侯非常重要。为了解决精度问题,我们可以引入decimal包。 在这里插入图片描述 可以看到,decimal包通过其特殊的储存规则,提高了浮点数的精度。 通过decimal.getcontext().prec=x,我们可以设置需要的精度。(这里第一次精度较长时,非常后面的位数仍出现了差错,可以进一步研究)。

以上。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3