科学计算器:幂、根、对数和三角函数
在线科学计算器,支持幂、根、log 和 ln、角度或弧度模式下的正弦、余弦和正切,以及阶乘、百分比和记忆功能。
Scientific Calculator
Evaluates a typed or tapped expression with the usual order of operations, including powers, roots, logarithms, trigonometry and factorials.
Keypad
How this calculator reads an expression
History
No calculations yet. Press = to add one.
文档
科学计算器
科学计算器用于求出书面数学表达式的值。此计算器可读取幂、根、对数、三角函数、阶乘和百分数,按照标准运算顺序进行计算,并给出一个答案。
计算器的功能
可将表达式输入“表达式”框,或使用键盘输入。表达式一改变,计算器就会读取它,因此无需按等号键即可查看答案。按下 = 键则会将计算结果添加到历史记录列表。
它接受:
- 数字、小数点,以及指数形式的数字,例如
1.5e-3; - 运算符
+、-、*、/和^(乘方),以及括号; - 常量
pi和e; - 函数
sin、cos、tan、asin、acos、atan、log、ln、sqrt和cbrt; - 后缀符号
!(阶乘)和%(百分号)。
键盘上的符号会转换为相应的普通形式,因此 ×、÷、− 和 π 分别与 *、/、- 和 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按计算先后列出如下:
- 括号内的任何内容,以及应用于括号的函数;
!和%;^;- 开头的
-或+符号; *、/,以及并列书写的两个对象;+和-。
由此产生的约定符合 ISO 80000-2:2019 以及维基百科的“运算顺序”条目:
| 书写形式 | 解释为 | 数值 |
|---|---|---|
2^3^2 | 2^(3^2) | 512 |
-2^2 | -(2^2) | -4 |
2^-2 | 2^(-2) | 0.25 |
2^3! | 2^(3!) | 64 |
100+10% | 100 + (10/100) | 100.1 |
1/2pi | (1/2) * pi | 1.57079632679 |
6/2(1+2) | (6/2) * (1+2) | 9 |
并列书写的两个数字或名称表示相乘,这使 2pi、2(3+4) 和 3sin(30) 能够正常计算。这种省略乘号的乘法与 * 和 / 处于同一优先级,因此并列书写与除法从左到右读取。许多手持科学计算器会让并列书写的乘法优先于除法,并将 1/2pi 解释为 1/(2*pi),所得答案不同。维基百科在“计算器输入方式”条目中介绍了这种分歧。只要差异会影响结果,就应使用括号。
% 无论出现在哪里,都表示除以 100。因此 20% 等于 0.2,200*15% 等于 30。它不是商店收银机上用于计算当前总额百分比的“百分比”键,也不是取余运算符。
算例
表达式 sin(30)+2^3*ln(4) 在“度”模式下按以下顺序计算:
sin(30)等于 0.5,因为 30 度是直角的一半,其正弦为二分之一。2^3等于 8。乘法之前先计算乘方。ln(4)等于 1.38629436112。8 * 1.38629436112等于 11.090354889。0.5 + 11.090354889等于 11.590354889。
计算器显示 11.590354889。
第二个例子说明从左到右的规则。在 6/2(1+2) 中,先计算括号,得到 6/2*3。除法与省略乘号的乘法优先级相同,因此先进行除法:6/2 等于 3,而 3*3 等于 9。
度与弧度
角度单位设置决定 sin、cos 和 tan 如何读取输入,也决定 asin、acos 和 atan 返回的单位。在“度”模式下,一整圈是 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; - 对不大于零的数字使用
log或ln; - 对超出 -1 至 1 范围的数字使用
asin或acos;该定义域见 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 节。
- 维基百科,“运算顺序”。
- 维基百科,“计算器输入方式”。