Math – Guava的数学工具包
这个包中含有各种各样的数学工具类,比 JDK 更优化, 测试更完善
Contents 综述
- Guava Math 提供了为基本数据类型而设计的独立的类[
IntMath
],[LongMath
],
[DoubleMath
], 和 [BigIntegerMath
], 这些类具有这相互平行的结构,
他们的方法都是基于相应数据类型而进行实现.
**请注意: 在com.google.common.primitives
包中, 有一些函数或者类可能看起来不那么的’数学’,
比如 [Ints
].** - Guava 为单个或者成对的数据集提供了各种统计计算的方法(比如求平均值,中位数等等).
如果想使用 Guava Math 包,请先阅读这个指南Stats 而不是去阅读 Java DOC. - [
LinearTransformation
] 代表着y = mx + b(这是个一次函数)
中的线性变换;
比如英尺和米之间的换算(英尺 = 米 * 3.2808399 ), 或者开氏温度与华氏温度之间的换算(℉ = 1.8 * K - 459.67 ).
Examples 举个栗子
int logFloor = LongMath.log2(n, FLOOR);
int mustNotOverflow = IntMath.checkedMultiply(x, y);
long quotient = LongMath.divide(knownMultipleOfThree, 3, RoundingMode.UNNECESSARY); // fail fast on non-multiple of 3
BigInteger nearestInteger = DoubleMath.roundToBigInteger(d, RoundingMode.HALF_EVEN);
BigInteger sideLength = BigIntegerMath.sqrt(area, CEILING);
Why use these? 为什么使用这些工具类?
- Guava Math的工具类为很多不常见的溢出情况都做了充分的测试. 溢出的语义也在相关的文档中进行了清晰的定义.
如果预检查不能通过, 则快速的返回失败(异常). - Guava Math 已经进行了基准测试和最佳的优化, 尽管因为不同的硬件原因会造成不可避免的性能差异,
但是 Guava Math 通常情况下的运行速度与Apache Commons
的MathUtils
互相媲美,
在某些场景下, Guava Math 甚至更优. - 这些类在设计之初就考虑到了代码的可读性、帮助养成好的编码习惯。
比如IntMath.log2(x, CEILING)
在你进行快速浏览代码的时候也能清晰快速的了解它的含义,