跳至内容

科学计算器:幂、根、对数和三角函数

在线科学计算器,支持幂、根、log 和 ln、角度或弧度模式下的正弦、余弦和正切,以及阶乘、百分比和记忆功能。

Scientific Calculator

Evaluates a typed or tapped expression with the usual order of operations, including powers, roots, logarithms, trigonometry and factorials.

Use + - * / for arithmetic, ^ for powers, ! for factorial and % for percent.

Type an expression or use the keypad to see a result.

Keypad

How this calculator reads an expression

Percent divides by 100 wherever it appears, so 100+10% is 100.1, not 110. Powers group from the right: 2^3^2 is 2^9, which is 512. A minus sign in front of a power is applied last, so -2^2 is -4. Two things written side by side are multiplied, and that multiplication ranks with division, so both are read left to right: 1/2pi means (1/2) times pi, and 6/2(1+2) is 9. Some scientific calculators read 1/2pi the other way, as 1/(2 times pi), so use brackets when the meaning matters. In Degrees mode the tangent is refused at 90 degrees and every odd multiple of it, because it has no value there.

History

No calculations yet. Press = to add one.

加载计算器...
📚

文档

科学计算器

科学计算器用于求出书面数学表达式的值。此计算器可读取幂、根、对数、三角函数、阶乘和百分数,按照标准运算顺序进行计算,并给出一个答案。

计算器的功能

可将表达式输入“表达式”框,或使用键盘输入。表达式一改变,计算器就会读取它,因此无需按等号键即可查看答案。按下 = 键则会将计算结果添加到历史记录列表。

它接受:

  • 数字、小数点,以及指数形式的数字,例如 1.5e-3
  • 运算符 +-*/^(乘方),以及括号;
  • 常量 pie
  • 函数 sincostanasinacosatanloglnsqrtcbrt
  • 后缀符号 !(阶乘)和 %(百分号)。

键盘上的符号会转换为相应的普通形式,因此 ×÷π 分别与 */-pi 含义相同。

log 是以 10 为底的对数,ln 是自然对数,底数为 e。这是 TI 和 Casio 科学计算器采用的标记方式,也是 NIST《数学函数数字图书馆》第 4.2 节采用的命名方式。

运算顺序

决定表达式含义的规则就是运算顺序。本计算器使用下面的语法。每一行都会调用它下面的那一行,因此嵌套关系构成优先级表:最后一行的绑定最紧,会最先计算。

1expression := term (('+' | '-') term)*
2term       := unary (('*' | '/' | juxtaposition) unary)*
3unary      := ('-' | '+') unary | power
4power      := postfix ('^' unary)?
5postfix    := primary ('!' | '%')*
6primary    := number | constant | name '(' expression ')' | '(' expression ')'
7

按计算先后列出如下:

  1. 括号内的任何内容,以及应用于括号的函数;
  2. !%
  3. ^
  4. 开头的 -+ 符号;
  5. */,以及并列书写的两个对象;
  6. +-

由此产生的约定符合 ISO 80000-2:2019 以及维基百科的“运算顺序”条目:

书写形式解释为数值
2^3^22^(3^2)512
-2^2-(2^2)-4
2^-22^(-2)0.25
2^3!2^(3!)64
100+10%100 + (10/100)100.1
1/2pi(1/2) * pi1.57079632679
6/2(1+2)(6/2) * (1+2)9

并列书写的两个数字或名称表示相乘,这使 2pi2(3+4)3sin(30) 能够正常计算。这种省略乘号的乘法与 */ 处于同一优先级,因此并列书写与除法从左到右读取。许多手持科学计算器会让并列书写的乘法优先于除法,并将 1/2pi 解释为 1/(2*pi),所得答案不同。维基百科在“计算器输入方式”条目中介绍了这种分歧。只要差异会影响结果,就应使用括号。

% 无论出现在哪里,都表示除以 100。因此 20% 等于 0.2,200*15% 等于 30。它不是商店收银机上用于计算当前总额百分比的“百分比”键,也不是取余运算符。

算例

表达式 sin(30)+2^3*ln(4) 在“度”模式下按以下顺序计算:

  1. sin(30) 等于 0.5,因为 30 度是直角的一半,其正弦为二分之一。
  2. 2^3 等于 8。乘法之前先计算乘方。
  3. ln(4) 等于 1.38629436112。
  4. 8 * 1.38629436112 等于 11.090354889。
  5. 0.5 + 11.090354889 等于 11.590354889。

计算器显示 11.590354889。

第二个例子说明从左到右的规则。在 6/2(1+2) 中,先计算括号,得到 6/2*3。除法与省略乘号的乘法优先级相同,因此先进行除法:6/2 等于 3,而 3*3 等于 9。

度与弧度

角度单位设置决定 sincostan 如何读取输入,也决定 asinacosatan 返回的单位。在“度”模式下,一整圈是 360 度。在“弧度”模式下,一整圈是 2pi,约为 6.28318530718。同一个表达式在两种模式下可能得到截然不同的答案:sin(30) 在“度”模式下为 0.5,在“弧度”模式下为 -0.988031624093。

数字的存储与显示方式

每个值都是 IEEE 754 binary64 双精度浮点数,是 ECMA-262《ECMAScript 语言规范》第 6.1.6.1 节所述的数字类型。双精度数可保存约 15 至 17 位十进制数字。显示给屏幕的答案只进行一次舍入,保留 12 位有效数字。小于 0.000001 或大于等于 1,000,000,000,000 的值以指数形式显示,因此 0.0000001 显示为 1E-7

存储的数字保留完整精度。内存保存的是精确结果,而不是屏幕上的 12 位数字;MR 会粘贴回能表示同一个数字的最短文本。负的内存值会以括号括起,因此在 2 后调出该值时,会被读取为乘法而不是减法。

舍入从不用于判定任何事情。先前运算留下的微小余数仍是真实数字,并会按数字处理。0.1*3-0.3 在二进制中不等于零,而是约为 5.55111512313E-17,因此 5/(0.1*3-0.3) 得到 9.00719925474E16,而不是显示除以零的消息。

出于同样的原因,sin(180) 在“度”模式下显示 1.22464679915E-16,而不是 0。这里的误差约为千亿亿分之一,并且会保持在这一微小程度。正切函数是例外,下面会说明其处理方式。

计算器拒绝处理的情况

出现以下情况时,计算器会显示消息而不是答案:

  • 分母恰好为零,包括小到无法由双精度数表示的书写数字,例如 1e-400;该数字读取后已经是零;
  • 对负数使用 sqrt
  • 对不大于零的数字使用 logln
  • 对超出 -1 至 1 范围的数字使用 asinacos;该定义域见 NIST DLMF 第 4.14 节;
  • 在 90 度或其任意奇数倍处使用 tan,因为这些位置没有定义值;
  • 对 0 至 170 范围之外的数,或对非整数请求阶乘;
  • 一个数字中出现第二个小数点,例如 1.2.3
  • 表达式超过 512 个字符。

170 的上限是数字类型本身的属性,而不是人为偏好:170 的阶乘约为 7.25741561531E306,仍可由双精度数表示,而 171 的阶乘则不能。512 个字符的限制在代码中检查,因为表达式长度决定计算器需要执行多少工作。

检查正切时,会先将角度舍入到小数点后 9 位,再进行测试。这样可将先前运算产生的偏差重新归回精确的渐近线,但代价是渐近线两侧各有约 5e-10 度宽的拒绝区间。tan(89.9999999994) 返回 95,493,592,025,而 tan(89.9999999995) 会被拒绝。弧度模式不进行这种检查,因为接近 pi 一半的输入弧度值只是另一个普通数字,没有特殊地位。

常见问题

这里的 % 键有什么作用? 无论出现在哪里,它都表示除以 100。100+10% 等于 100.1,因为它表示 100 加上 0.1。它不会计算前面所有内容的百分比。

2^3^2 是 64 还是 512? 512. 乘方从右向左结合,因此它表示 2^(3^2),也就是 2^9。这符合 ISO 80000-2:2019。

为什么 6/2(1+2) 是 9 而不是 1? 省略乘号的乘法与除法优先级相同,而优先级相同的运算从左到右读取。将并列书写绑定得更紧的计算器会得到 1。使用括号即可消除歧义。

为什么 sin(180) 不显示 0? 因为 180 度会先转换为弧度,而 pi 无法用二进制精确表示。结果约为 1.2e-16,这正是机器实际使用的那个数字的正弦真实值。

log 和 ln 有什么区别? log 的底数是 10,因此 log(1000) 等于 3。ln 的底数是 e,因此 ln(e) 等于 1。键盘标记遵循与 TI 和 Casio 科学计算器相同的约定。

为什么大于 170 的阶乘会被拒绝? 171 的阶乘大于双精度数能够保存的任何数,因此答案会是无穷大,而不是一个数字。计算器会显示相应消息,而不是给出无意义的结果。

来源

  • IEEE 754-2019,《IEEE 浮点算术标准》。
  • ECMA-262,《ECMAScript 语言规范》第 6.1.6.1 节“数字类型”。
  • ISO 80000-2:2019,《量和单位》第 2 部分:数学符号和记号。
  • NIST《数学函数数字图书馆》第 4.2 节和 4.14 节。
  • 维基百科,“运算顺序”。
  • 维基百科,“计算器输入方式”。