chippyash / math-type-calculator
为 chippyash/strong-type 数值类型提供计算器
Requires
- php: >=5.6
- chippyash/strong-type: >=5,<6
Requires (Dev)
- phpunit/phpunit: >=4.8.9,<5
README
质量保证
查看测试合约。
上述徽章代表当前主分支。一般来说,除非测试、覆盖率和使用性可接受,否则我不会推送到GitHub。在假期、需要为其他下游项目编写代码等短时间期间,这可能不成立。如果您需要稳定的代码,请使用标记版本。阅读“进一步文档”和“安装”。
当前开发分支是 feature/gmp_support。想帮忙?- 那就是它所在的地方。
请注意,此库的 PHP5.4 & 5.5 开发者支持在 3.0.0 版本中已取消。如果您需要 PHP 5.4 或 5.5 的支持,请使用版本 >=2,<3
是什么?
为 chippyash/strong-type 数值类型提供算术计算支持(目前仅支持 PHP 原生类型。)
支持类型
- FloatType
- ComplexType
- IntType
- NaturalIntType
- WholeIntType
- RationalType
- 将 PHP int 和 float 转换为 IntType 和 FloatType
提供的算术支持
- 加法
- 减法
- 乘法
- 除法
- 倒数
- 等式比较
该库在GNU GPL V3 或更高版本许可下发布
为什么?
补充了强类型库,并是即将推出的 chippyash/math-matrix 库的先导,该库基于 chippyash/matrix 库构建。
何时
当前库涵盖了使用 PHP 原生数学支持的算术操作。未来的版本将添加对流行数学扩展(gmp、bcmath 等)的支持。
如果您想要更多,可以建议,或者更好的是,分叉它并提供一个拉取请求。
查看chippyash/Strong-Type,了解包括数值、有理和复数类型在内的强类型支持,该库在此操作
查看chippyash/Matrix,了解矩阵数据类型支持。
查看chippyash/Logical-Matrix,了解逻辑矩阵操作。
查看chippyash/Math-Matrix,了解数学矩阵操作。
查看ZF4 Packages,了解更多包。
如何
编码基础
使用提供的计算器或比较器将底层 Strong Type 数值基础设置为 PHP 原生。该库尚不支持 GMP 数值类型。
计算
使用计算器非常简单
use Chippyash\Math\Type\Calculator; $calc = new Calculator()
然后您只需向它发送计算请求
use Chippyash\Type\TypeFactory; $r = TypeFactory::create('rational', 2, 3); $i = TypeFactory::create('int', 23); $w = TypeFactory::create('whole', 3); $n = TypeFactory::create('natural', 56); $f = TypeFactory::create('float', 19.6); $c1 = TypeFactory::create('complex', '2+3i'); $c2 = TypeFactory::create('complex', '-6+4i'); echo $calc->add($r, $w) . PHP_EOL; echo $calc->add($c1, $c2) . PHP_EOL; echo $calc->add($i, $f) . PHP_EOL; echo $calc->sub($c1, $c2) . PHP_EOL; echo $calc->sub($n, $w) . PHP_EOL; echo $calc->add($r, $w) . PHP_EOL; echo $calc->add($r, $w) . PHP_EOL; echo $calc->add($r, $w) . PHP_EOL;
计算器支持以下方法(所有操作数都是 NumericTypeInterface、PHP int 或 PHP float)
- add($a, $b) : NumericTypeInterface
- sub($a, $b) : NumericTypeInterface
- mul($a, $b : NumericTypeInterface
- div($a, $b) : NumericTypeInterface
- reciprocal($a) : NumericTypeInterface
- pow($base, $exp) : NumericTypeInterface
- sqrt($a) : NumericTypeInterface
计算器会在类型之间进行仲裁,并返回基于操作数类型的可能最低类型。优先级顺序为
- ComplexType
- RationalType
- FloatType
- IntType(包括WholeIntType和NaturalIntType)
注意复杂数据类型,只有当它们是实数时才能向下转换,即虚部等于0
提供了sqrt()方法作为便利,您可以使用pow(n, 1/e),例如pow(4, 1/2) == sqrt(4)
要演示所有类型之间的操作及其结果类型,请运行examples/example-calc.php文件
比较
要比较两种数值类型
use Chippyash\Math\Type\Comparator; use Chippyash\Type\TypeFactory; $r = TypeFactory::create('rational', 2, 3); $i = TypeFactory::create('int', 23); $w = TypeFactory::create('whole', 3); $n = TypeFactory::create('natural', 56); $f = TypeFactory::create('float', 19.6); $c1 = TypeFactory::create('complex', '2+3i'); $c2 = TypeFactory::create('complex', '-6+4i'); $comp = new Comparator(); if ($comp->compare($r, $i) == 0) {...} if ($comp->compare($c1, $c2) == -1) {...} if ($comp->compare($w, $n) == 1) {...}
Comparator::compare($a, $b)方法接收两个NumericTypeInterface类型的参数,并返回
a == b: 0
a < b : -1
a > b : 1
它有便利方法(所有操作数都是NumericTypeInterface)
- eq($a, $b) : boolean: $a == $b
- neq($a, $b) : boolean: $a != $b
- lt($a, $b) : boolean: $a < $b
- lte($a, $b) : boolean: $a <= $b
- gt($a, $b) : boolean: $a > $b
- gte($a, $b) : boolean: $a >= $b
if ($comp->gt($w, $f) { ... }
更改库
- 分叉它
- 编写测试
- 修改它
- 发起拉取请求
发现了一个无法解决的bug吗?
- 分叉它
- 编写测试
- 发起拉取请求
注意。在发起拉取请求之前,请确保您已将分支重新基到HEAD
在哪里?
该库托管在Github上。它可在Packagist.org找到
安装
安装Composer
对于生产环境
添加
"chippyash/math-type-calculator": ">=3,<4"
到您的composer.json "requires"部分
对于开发
克隆此仓库,然后在本地仓库根目录中运行Composer以拉入依赖项
git clone git@github.com:chippyash/chippyash/Math-Type-Calculator.git TypeCalc cd TypeCalc composer update
要运行测试
cd TypeCalc vendor/bin/phpunit -c test/phpunit.xml test/
许可证
此软件库在BSD 3 Clause许可下发布
此软件库版权所有(c)2015-2018,Ashley Kitson,英国
历史
V0... 预发布版
V1.0.0 原始发布
V1.0.1 添加混合复杂数据类型和非复杂数据类型作为操作数的能力
V1.0.2 利用chippyash/strong-type >= 1.0.10
V1.1.0 添加用于相等比较的comparator类
V1.1.1 修复错误的comparator构造
V1.1.2 修复通过转换为有理数进行原生int/float比较
V1.1.4 对依赖库进行重构
V1.1.5 更新依赖版本号
V1.1.6 添加pow和平方根功能
V1.1.7 添加使用复数指数的复数pow
V1.1.8 更新依赖版本号
V1.1.9 更新依赖版本号 V1.1.9a 升级以修复失败的构建
V1.1.10 修复计算器以使用原生PHP数值类型,直到GMP计算器支持可用
V2.0.0 BC Break:将命名空间从chippyash\Math更改为Chippyash\Math\Type
V2.0.1 添加链接到包
V2.0.2 确保与PHP7兼容
V2.0.3 依赖项更新
V3.0.0 BC Break。撤回对旧PHP版本的支持
V3.1.0 许可证从GPL V3更改为BSD 3 Clause