在Swift中的三角函数

4
我是一名iOS初学者开发者。我使用一些在线教程来学习Swift,现在我正在尝试开发自己的计算器。其中一个任务是自己编写“sin”和“cos”按钮,它们可以返回输入值的正弦或余弦函数。
当然,Swift中有sin()和cos()函数,但我发现它返回的是弧度而不是角度。我进行了搜索,并找到了类似于以下的代码。
func sind(degrees: Double) -> Double {
return sin(degrees * M_PI / 180.0)
}

我在我的代码中实现了这个功能。现在一切看起来都很好,按钮返回正确的值。但是正弦180度的值为0,当我在我的计算器中输入180并按下“sin”按钮时,它返回另一个值。同样的,余弦90度应该是0,但返回另一个值。
你能解释一下如何修复它吗?完整代码在Github上:https://github.com/senator14/firstcalculator.git

1
@DanielKrom:(Objective-C)和Swift使用相同的浮点算术。 - Martin R
@MartinR 谢谢。我之前已经阅读过这个帖子了。我尝试了你的方法,但是不幸的是,我无法获得_sinpi函数。我尝试导入Darwin、Cocoa和math.h,但都没有帮助 :( - Senator14
@MartinR 是的,我尝试过了,但当我使用_sinpi()函数时,Xcode会显示“未解决的标识符'_sinpi'”。 - Senator14
@Senator14: __sinpi两个 下划线。只需从 https://dev59.com/Fojca4cB1Zd3GeqPqQH3#28600210 复制粘贴代码到您的 ViewController.m 中,它应该可以编译而无需问题! - Martin R
@MartinR 是的,我明白了,只是想手动输入以更好地记住它 :) 非常感谢您的回复,__sinpi() 的效果非常好! - Senator14
显示剩余4条评论
1个回答

3

正弦和余弦函数的问题是M_PI是一个无理数,近似定义为3.14159265358979323846264338327950288 ,这意味着它有一些误差。

解决问题的一个可能方法是输入范围从-PI/2到PI/2。这减少了近似误差。以下更改为-90到90度的范围。

sin(((fmod($0, 360) > 270 ? fmod($0, 360) - 270 : ((fmod($0, 360) > 90) ? 180 - fmod($0, 360) : fmod($0, 360))) * M_PI / 180.00)) }

Reference from here


谢谢@meteors!这对我有用。我理解了问题,现在正在尝试理解代码。然而,对于余弦函数应该如何工作呢?余弦函数的范围是否应该从-180度到180度?这正确吗?提前感谢您。 - Senator14
@Senator14 不是的。余弦函数的取值范围也应该是从-90到90。如果这样不行,可以尝试0到180。 - meteors
谢谢。我尝试了从-90到90的余弦函数,但它没有起作用。我将尝试将其改为0到180。再次感谢您。 - Senator14

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接