Lua中数学函数的问题

我们的任务是:

读取一个角度,并以相同的顺序打印该角度的正切、余割、正割和余切值。 若要使用rad()函数,请将角度从度转换为弧度,以便使用标准库函数。

我们编写的代码如下:

x = io.read()

radianVal = math.rad (x)

io.write(string.format("%.1f ", math.tan(radianVal)),"\n")

io.write(string.format("%.1f ", math.cosh(radianVal)),"\n")

io.write(string.format("%.1f ", math.sinh(radianVal)),"\n")

io.write(string.format("%.1f ", math.cos(radianVal)),"\n")

但输出结果与期望值不符,不确定问题出在哪里

将Run设为Custom Input
30

输出(stdout)
0.6
1.1
0.5
0.9

期望输出
0.57735026918963
2.0
1.1547005383793
1.7320508075689

正确的代码如下:

x = io.read()

function cot(radAngle)
  return 1 / math.tan(radAngle)
end

function cosec(radAngle)
  return 1 / math.sin(radAngle)
end

function sec(radAngle)
  return 1 / math.cos(radAngle)
end

local radAngle = math.rad(x)
print(math.tan(radAngle))
print(cosec(math.rad(x)))
print(sec(math.rad(x)))
print(cot(math.rad(x)))
点赞
用户2858170
用户2858170

如何期望在计算 csc(x) 而非 cosh(x) 的情况下获得正确结果?你正在使用双曲余弦函数来计算余割。我认为显然你的结果无法被接受。

你使用 sinh(x) 来计算 sec(x),使用 cos(x) 来计算 cot(x)

你混淆了数学函数。这不是 Lua 编程问题。

我建议你花几个小时研究三角函数。

https://en.wikipedia.org/wiki/Trigonometric_functions

这些值是通过正确的公式或函数计算的,而不是使用任何具有类似名称的数学库函数。

顺便说一下,自 Lua 5.3 起,cosh 已被弃用。

您可以使用 math.tan 来计算您的角度的正切值。

对于正割、余割和余切,您将需要实现自己的函数。

还要注意,小数位数可能会导致结果验证问题。确保可以四舍五入到 1 位小数。

示例:

没有计算角度余切的函数。因此,我们定义一个函数。

function cot(radAngle)
  return 1 / math.tan(radAngle)
end

local radAngle = math.rad(30)
print("tan(30°):", math.tan(radAngle))
print("cot(30°):", cot(math.rad(30)))

->
tan(30°):   0.57735026918963
cot(30°):   1.7320508075689
2020-08-14 08:56:44