chippyash/math-type-calculator

为 chippyash/strong-type 数值类型提供计算器

3.1.0 2018-07-05 16:54 UTC

This package is auto-updated.

Last update: 2024-09-22 22:32:45 UTC


README

质量保证

PHP 5.4 PHP 5.5 PHP 5.6 PHP 7 Build Status Test Coverage Code Climate

查看测试合约

上述徽章代表当前主分支。一般来说,除非测试、覆盖率和使用性可接受,否则我不会推送到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) { ... }

更改库

  1. 分叉它
  2. 编写测试
  3. 修改它
  4. 发起拉取请求

发现了一个无法解决的bug吗?

  1. 分叉它
  2. 编写测试
  3. 发起拉取请求

注意。在发起拉取请求之前,请确保您已将分支重新基到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