OJ之大数与高精度题必备知识

浮点数的存储方式与高精度

存储原理

科学计数法
IEEE 754

待补充。。。

高精度计算中的误差与规避技巧

待补充。。。

PI的高精度表示方法

对精度要求较高的题目,一般PI的表示会需要高精度来确保结果的准确性。这时可以用 math.h 中的反三角函数来表示高精度的PI:

 PI = atan(1.0) * 4; 或 PI = acos(-1); 都可以达到目的。

【注意:三角函数和反三角函数中的输入都是弧度,而非角度。】

数据类型的表示范围

整型

在内存中,正数以原码的形式存储,负数以补码的形式存储。

整型数据主要考察大数的计算、存储与表示。

 int_32 :最大20亿左右(即一个2,后面跟9个0);

 long 类型在不同的编译器中可能不一样,总体原则是不小于 int_32 ,所以一般大数容量不够时直接升级 long long ;

 long long :最大为一个9后面跟18个0

所有类型的 unsigned 的话没有负数部分,最大值乘以2。

浮点型

与整型不同,浮点型数据在内存中的存储方式是科学计数法,所以在高精度计算中,如果参与计算的数据精度不够会导致计算结果有较大偏差。

这里的精度,即小数点后的位数

 float :4字节,7位精度;

 double :8字节,15位精度;

 long double :10字节,19位精度;

【有关数据类型之间的转换详见这篇:混合运算中不同数据类型之间的转换原则(C语言)

 关于内存限制1MB = 1024KB = 1048576Byte

16位的平台 int 是16位的(16位操作系统),就是0x0000 ~ 0xFFFF, 一个 int 占2个字节,所以1MB内存可以有524288个 int_16 ;

32位的平台 int 是32位的(32位及以上操作系统),就是0x00000000 ~ 0xFFFFFFFF,一个 int 占4个字节,所以1MB内存可以有262144个 int_32 ;

以此类推。

 

posted @ 2020-12-28 11:24  箐茗  阅读(247)  评论(0编辑  收藏  举报