Skip to content

MrY-Cat/math

Repository files navigation

my.math

基于kotlin的一个简单数学函数包

一.目录结构:

1.组合数学公式:实现在combinatorics目录下,每个公式单独一个文件,例如Factorial

2.自定义数据类:实现在data目录下,每个类单独一个文件,例如Matrix

3.复杂数学问题:实现在problem目录下,每个问题单独一个文件,例如GatherEventCluster

4.自定义异常类:实现在exception目录下,要求该包代码中人为主动抛出的所有异常均应继承自接口MathException

5.自定义工具类:实现在util目录下,每个类单独一个文件,例如MathOverflow

6.图片资源:存放在image目录下,用于保存注释中URL所链接的图片。

7.测试:目前实现在test目录下的Tests.kt中。

8.若实现到其他数学方面的公式或函数,在主目录下新开一个子目录。

二.支持的内容:

支持的公式:

阶乘公式

排列数公式

组合数公式&组合生成

错排公式

有序分组情况数

有序整数拆分(情况数&结果矩阵)

支持的数据:

矩阵

支持的问题:

集齐完备事件组期望次数问题(加权完全图的随机游走覆盖时间?)

三.欢迎贡献:

欢迎贡献代码,请fork代码到自己的仓库或新建分支,修改后再提交Pull request 。

注意:

1.对于返回大整数的组合数学公式,n增大时结果增长可能很迅速,需实现两个同名函数(可参考Combination):

• 前者接收Long返回BigInteger,后者接收Int返回Long,二者独立实现。

• 在后者的函数注释中尽可能注明将会溢出的情况,提示在此情况下应使用前者。

• 若函数的返回值溢出条件可计算且函数中间值的溢出条件不先于返回值:应在MathOverflow中实现同名函数用于精确判断是否溢出,并在后者内部调用,满足溢出情况则抛出MathOverflowException。

2.对于某些精确度要求较高的计算,应使用BigDecimal,缺少超过Double精度的数学常数时在MathConstant中添加。

• 例如在Derangement中,若采用简化公式D(n)=[n!/e+1/2],则需使用更高精度的MathConstant.E,否则在n>18时计算将有误差。

四.写在最后:

• 开发该项目的出发点是面向需求(x)编程学习kotlin、对数学问题进行计算验证、方便后续遇到相关数学问题时使用。

• 代码水平和数学水平有限,如有错误和疏漏欢迎指出。

代码风格可能与经典的左大括号不换行相违背,为个人遗留习惯,不喜勿喷(dog)。

• 欢迎路过的大佬提交Pull request贡献代码或发布issue。