说明
入门
入门
例子
文档
核心
配置
链式调用
扩展
序列化
表达式
解析和评估
句法
表达式树
代数
定制
安全
数据类型
数字
大数字
分数
复数
矩阵
单位
参考
类
方法
常量
定制捆绑
命令行界面
历史
数字 - Math.js文档 - 笔下光年
网站首页
数字
Math.js 支持三种类型的数字: - Number 用于快速浮点运算,在此页面上进行了描述。 - BigNumber 用于任意精度算术,在 [BigNumbers](http://www.bixiaguangnian.com/manual/mathjs/375.html "BigNumbers") 页面上进行了描述。 - Fraction,它以分子和分母的形式存储数字,如[分数](http://www.bixiaguangnian.com/manual/mathjs/376.html "分数")页中所述。 ### Configuration 大多数函数可以从输入的类型来确定输出的类型:一个数字作为输入将返回一个数字作为输出,一个 BigNumber 作为输入返回一个 BigNumber 作为输出。 无法从输入确定输出类型的函数(例如 `math.evaluate`)使用默认数字类型,可以在实例化 math.js 时配置: ```javascript math.config({ number: 'number' // Default type of number: // 'number' (default), 'BigNumber', or 'Fraction' }) ``` ### Round-off errors Math.js 使用内置的 JavaScript Number 类型。 Number 是一个浮点数,精度为 64 位,约 16 位。 JavaScript Number 可以表示的最大整数是 `+/- 9007199254740992` (`+/- 2^53`)。 由于浮点数的精度有限,计算过程中可能会出现舍入误差。 这很容易证明: ```javascript // a round-off error 0.1 + 0.2 // 0.30000000000000004 math.add(0.1, 0.2) // 0.30000000000000004 ``` 在大多数情况下,舍入误差无关紧要:它们对结果没有重大影响。 但是,在向用户显示输出时它看起来很丑。 一种解决方案是将精度限制在显示输出中 16 位的实际精度以下: ```javascript // prevent round-off errors showing up in output const ans = math.add(0.1, 0.2) // 0.30000000000000004 math.format(ans, {precision: 14}) // '0.3' ``` 替代方法是使用将数字存储为分子和分母的分数,或使用 BigNumbers 存储具有更高精度的数字。 ### Minimum and maximum A Number can store values between `5e-324` and `1.7976931348623157e+308`. Values smaller than the minimum are stored as `0`, and values larger than the maximum are stored as `+/- Infinity`. ```javascript // exceeding the maximum and minimum number console.log(1e309) // Infinity console.log(1e-324) // 0 ``` ### Equality 由于计算中的舍入错误,比较 JavaScript 数字是不安全的。 例如,在 JavaScript 中执行 `0.1 + 0.2 == 0.3` 将返回 false,因为加法 `0.1 + 0.2` 会引入舍入错误并且不会准确返回 `0.3`。 为了解决这个问题,math.js 的关系函数会检查比较值之间的相对差异是否小于配置的选项 epsilon。 在伪代码中(不包括 0、Infinity 和 NaN): ```javascript diff = abs(x - y) nearlyEqual = (diff <= max(abs(x), abs(y)) * EPSILON) OR (diff < DBL_EPSILON) ``` 在哪里: - `EPSILON` is the relative difference between x and y. Epsilon is configurable and is `1e-12` by default. See [Configuration](http://www.bixiaguangnian.com/manual/mathjs/362.html "Configuration"). - `DBL_EPSILON` is the minimum positive floating point number such that `1.0 + DBL_EPSILON !== 1.0`. This is a constant with a value of approximately `2.2204460492503130808472633361816e-16`. Note that the relational functions cannot be used to compare small values (`< 2.22e-16`). These values are all considered equal to zero. 例子: ```javascript // compare values having a round-off error console.log(0.1 + 0.2 === 0.3) // false console.log(math.equal(0.1 + 0.2, 0.3)) // true // small values (< 2.22e-16) cannot be compared console.log(3e-20 === 3.1e-20) // false console.log(math.equal(3e-20, 3.1e-20)) // true ``` 可用的关系函数有: `compare`, `equal`, `larger`, `largerEq`, `smaller`, `smallerEq`, `unequal`。
上一篇:
数据类型
下一篇:
大数字