跳转到内容

Python 和 Ruby 中的数学 / Ruby 中的实数

来自 Wikibooks,开放世界的开放书籍

十进制表示

[编辑 | 编辑源代码]

自从数字出现以来,数字在某种程度上比分数更具体:看到 给人一种感觉,似乎有两个数字而不是一个数字,而 1.2 乍一看就是一个数字。

十进制数

[编辑 | 编辑源代码]

当一个数具有有限个数字时,它就是十进制数。那么,不是十进制数的实数将具有无限的十进制展开式。可以故意构造这样的数字,例如 刘维尔数

Ruby 中,某些十进制数仍然具有无限的表示:这种明显的悖论是由于 Ruby 中数字的内部表示是二进制的,即使像 1.2 这样简单的数字也具有无限的二进制展开式。

分数的特征是其(有限或无限)展开式最终是周期性的。例如

puts(1.0/3)
puts(1.0/9.0)
puts(1/11.0)
puts(1.0/7)

无理数

[编辑 | 编辑源代码]

第一个被认为不是分数的数字是平方根和著名的 黄金分割。以下是其中一些

puts(2**0.5)
puts(Math.sqrt(2))
puts((1+5**0.5)/2)
puts((Math.sqrt(5)+1)/2)

两个著名的 超越数e 和 π ; 它们是 Math 对象的属性

puts(Math::E)
puts(Math::PI)

香槟常数 可以从字符串对象构建

c='0.'
(1..40).collect { |n| c=c+n.to_s }
puts(c.to_f)
puts(c.to_r)

首先,c 是一个字符串,Ruby 知道这一点,因为它写在引号之间。它已经表示了常数的十进制展开式,该展开式以开头,后面跟着小数点。然后,对象 (1..40)(一个整数列表)在运行时创建,并调用其 collect 方法,带有一个小的 Ruby 块,该块只有一个名为 n 的变量,只有一个指令,要求将 n 的字符串表示形式添加到 c 中。由于 c 是一个字符串,+ 表示字符串加法,即 连接。最后,c 被转换为浮点数或分数。

四则运算由经典的 +-*/ 表示。只要操作数之一包含小数点,它就会被识别为实数,并应用浮点数运算。欧几里得除法也可以使用,这允许 Ruby 计算角度的主值(以弧度为单位)

puts(100%Math::PI)

减号也可以是单目运算符,在这种情况下,它表示以下数字的否定。要将数字 h 加到另一个数字 x 上,可以写 x=x+h,也可以写 x+=h,后者更短。

要获得实数的整数近似值,可以使用 floorceilto_i。要获得数字 x 的绝对值,使用 x.abs。它的平方根可以使用以下任何一种方法获得

r=2**0.5
puts(r)
r=Math.sqrt(2)
puts(r)


对数和双曲函数

[编辑 | 编辑源代码]

要计算自然对数、十进制对数和双曲圆函数的自变量,写

puts(Math.log(0.5))
puts(Math.log10(0.5))
puts(Math.acosh(0.5))
puts(Math.asinh(0.5))
puts(Math.atanh(0.5))

双曲函数

[编辑 | 编辑源代码]

以下脚本计算并显示 2 的指数和双曲圆函数

puts(Math.exp(2))
puts(Math.cosh(2))
puts(Math.sinh(2))
puts(Math.tanh(2))

圆函数

[编辑 | 编辑源代码]

要获取以弧度为单位测量 1 弧度的角度的余弦、正弦和正切

puts(Math.cos(1))
puts(Math.sin(1))
puts(Math.tan(1))

要从上述数字之一获取角度,只需在函数名称之前添加一个额外的 a 即可

puts(Math.acos(0.5))
puts(Math.asin(0.5))
puts(Math.atan(0.5))

要从直角三角形的边知道一个角,可以使用 Math.atan(y/x)Math.atan2(x,y)。要知道第三条边,可以使用 Math.hypot(x,y)。例如,如果知道直角三角形的两条边分别为 5' 和 12',可以使用以下脚本知道角度和斜边

cdr=180/Math::PI
a=12
b=5
puts(Math.atan2(a,b)*cdr)
puts(Math.atan2(b,a)*cdr)
puts(Math.hypot(a,b))
华夏公益教科书