🧰 UtlKit

科学计算器怎么用: 从纯按钮键盘的表达式算出三角, 对数, 幂和阶乘, 在浏览器

一行表达式, 完全用 33 键屏幕键盘在 DEG 或 RAD 模式下输入, 算出三角, 反三角, 十进制和自然对数, 平方根, 绝对值, 幂和整数阶乘, 全部在浏览器内计算.

科学计算器是一个纯按钮的表达式求值器: 没有文本输入框, 没有键盘捕获, 表达式行的每个记号都来自 33 键的键盘 — 十个数字, 一个小数点, 加, 减, 乘, 除, 幂五个运算符, 常数 π 和 e, 十个函数按钮, 阶乘, 括号键, 清除, 退格和等号. 页面以 DEG 模式加载. 按等号会把该行改写成结果, 所以答案可以直接进入下一个运算. 每个值都由浏览器内的 Math 对象算出, 没有后端, 没有 API 调用. 从科学计算器开始, 保持 DEG 选中, 按 sin, ( ), 4, 5, ( ), =: 该行读作 0.7071067812.

键盘

33 个键排成五列网格. 上面三行是函数和编辑键: sin, cos, tan, π 和清除; asin, acos, atan, 退格和 ( ) 键; log, ln, sqrt, x! 和等号. 下面四行是数字和运算符: 7 8 9 配除号和幂, 4 5 6 配乘号和 e 常数, 1 2 3 配减号和加号, 最后一行是 0, 小数点和 abs. x! 键的标签带一个 x, 但它只插入 ! 记号, 且该记号绑定到前面输入的整数: 5, x!, = 打印 120. ( ) 键是括号的唯一来源, 它一次插入一个平衡的括号而不是成对插入 — 该行平衡时它打开一组, 前面的参数完整时它闭合一组, 所以函数调用和嵌套都能只靠键盘输入.

DEG 和 RAD

切换按钮在页面加载时读作 DEG, 模式一次改变两件事. 三个直接函数按度读参数: sin(45) 是 0.7071067812, cos(60) 是 0.5, tan(45) 是 1. RAD 模式下同样的三个调用按弧度读参数, sin(45) 变成 0.8509035245. 三个反函数按匹配的单元打印结果: asin(1) 在 DEG 下是 90, 在 RAD 下是 1.5707963268, atan(1) 在 DEG 下是 45. 切换模式不改写该行, 它只改变下一次等号如何读该行, 所以同一行 sin(45) 在两种模式下求值出两个不同的数.

哪个对数是哪个

log 键是十进制对数, ln 键是自然对数. log(100) 打印 2, 因为 10 的 2 次方是 100; ln(e) 打印 1, 因为 e 常数和自然对数互为反函数. 没有底数选择器: 以 2 为底的对数得用现成的两个底自己搭, 即 log(x) 除以 log(2).

幂, 常数和阶乘

^ 键是幂运算符. 2, ^, 1, 0, = 打印 1024, 而打印的结果成为新的一行, 所以接着按 ^, 2, = 打印 1048576. π 键单独打印 3.1415926536, 2, ×, π, = 打印 6.2831853072, 因为非整数结果被修剪到十位小数. e 键是欧拉数, 2.7182818285. 阶乘只限整数: 5! 是 120, 0! 是 1, 17! 是 355687428096000, 20! 是 2432902008176640000; 100! 超出能打印成普通整数的范围, 以科学计数法 9.33262154439441e+157 出现.

分组和嵌套调用

因为 ( ) 键一次插入一个括号, 45 的正弦输入为 sin, ( ), 4, 5, ( ), 嵌套调用从内到外以同样的方式输入: 0 的余弦的正弦是 sin, ( ), cos, ( ), 0, ( ), ( ), 其中 0 之后的那次按键闭合内层 cos, 下一次按键闭合外层 sin. DEG 模式下这行嵌套求值出 0.0174524064. 分组控制优先级, 和纸上完全一致: ( ), 1, +, 2, ( ), ×, 3 打印 9, 而不加括号的 1, +, 2, ×, 3 打印 7.

结果和无效行

等号把整数打印成普通整数, 其余结果修剪到十位小数: 1÷3 打印 0.3333333333, 0.1+0.2 打印 0.3, sqrt(2) 打印 1.4142135624. 成为下一行的是打印出的字符串, 不是全精度值, 所以下一个运算读到的是修剪过的数, 修剪会显形: 1÷3 之后按 ×, 3, = 打印 0.9999999999, sqrt(2) 之后按 ^, 2, = 打印 2.0000000001. 无法求值的行会显示页面语言的表达式无效错误, 且该行留在显示屏上以便修正: 1÷0, asin(2), (-1)^0.5 和 2.5! 都会触发, 2π 也是, 因为求值器没有隐式乘法, 数字和常数之间必须按 × 键.

浮点角

DEG 模式下的 tan(90) 不报错: 它打印 16331239353195370. 90 的度到弧度换算在浮点里落在精确 π/2 之前一点点, 那里正切无定义, 所以正弦除以余弦返回一个大的有限值, 而不是失败. 超过 15 位的整数会丢尾: 123456789123456789 以 123456789123456780 出现, 因为表达式字符串保留了全部 19 位, 但求值把它解析成 64 位浮点数, 只保住大约 15 位.

它不是什么

科学计算器不是百分比工具: 一个数的百分比双向计算由百分比计算器完成, 百分比指南讲增减问题. 它也不是折扣计算器: 折后价和节省额由折扣计算器算. 而且它除该行之外不保存任何状态: 没有存储键, 没有历史, 没有保存的结果, 没有常数重复, 清除键一次性抹掉该行, 结果和错误.

相关工具

常见问题

科学计算器会调用任何 API 或服务器吗?

不会. 表达式行被改写成浏览器 Math 调用 — 三角函数在 DEG 模式下先做度到弧度的换算, log 和 ln 映射到十进制和自然对数, 阶乘映射到对整数的循环 — 然后在页面内求值. DEG/RAD 切换只改变下一次求值如何读该行. 你按下的内容不会离开页面.

为什么同一行 sin(45) 给出两个不同的答案?

因为 DEG/RAD 模式改变参数如何被读. DEG 模式下 45 先换算成弧度再取正弦, sin(45) 是 0.7071067812; RAD 模式下 45 本身就是弧度角, 结果是 0.8509035245. 反函数随模式翻转: asin(1) 在 DEG 下打印 90, 在 RAD 下打印 1.5707963268.

为什么 log 是十进制而不是自然对数?

这是有意的拆分: log 是十进制, 所以 log(100) 是 2; ln 是自然对数, 所以 ln(e) 是 1. 键盘上没有底数选择器, 以 2 为底的对数用现成的两个底搭出来, 即 log(x) 除以 log(2).

为什么 2.5! 报错而 5! 打印 120?

阶乘键只匹配 ! 记号前面的整数, 所以 5! 是 120, 0! 是 1, 17! 是 355687428096000, 但 2.5 这样的小数永远不构成阶乘调用, 该行求值失败. 没有伽马函数扩展来接受小数输入.

为什么 tan(90) 打印一个大数而不是报错?

因为 90 度到弧度的换算在浮点里落在精确 π/2 之前一点点, 那里正切无定义, 所以函数返回一个大的有限值 16331239353195370, 而不是失败. 表达式无效错误只保留给求值器完全无法产出的值: 1÷0, asin(2) 和 (-1)^0.5.

相关文章