三角函数(cos)将不同的值返回到计算器

时间:2017-02-25 07:37:03

标签: swift trigonometry cos

当我在计算器cos(0)= 1上使用cos函数时,cos(90)= 0 cos(180)= -1和cos(270)= 0.但是我不知道如何在我的代码中生成这些结果。我在代码中收到的结果是1或-1,但从不为0.以下是我试过的,没有人给我与计算器相同的结果,我缺少什么?

print(cos(0))               // receiver error "Ambiguous use of 'cos'"
print(cos(90))              // receiver error "Ambiguous use of 'cos'"
print(cos(180))             // receiver error "Ambiguous use of 'cos'"
print(cos(270))             // receiver error "Ambiguous use of 'cos'"

print(cos(M_PI*0))          // returns 1
print(cos(M_PI*1))          // returns -1
print(cos(M_PI*2))          // returns 1
print(cos(M_PI*3))          // returns -1

print(cos(M_PI*0))          // returns 1
print(cos(M_PI*90))         // returns 1
print(cos(M_PI*180))        // returns 1
print(cos(M_PI*270))        // returns 1

print(cos(M_PI/M_PI-1))     // returns 1
print(cos(M_PI/M_PI+89))    // returns -0.44
print(cos(M_PI/M_PI+179))   // returns -0.59
print(cos(M_PI/M_PI+269))   // reutnrs 0.98

以下通过1,0,-1,0:

的结果重复
var x: Double = 0
while x < 100 {
    print(Int(cos(M_PI*(x*0.5))))
    x = x + 1
} 

1 个答案:

答案 0 :(得分:2)

Darwin三角函数在Radians中起作用。

问题1.1

print(cos(0))               // receiver error "Ambiguous use of 'cos'"
print(cos(90))              // receiver error "Ambiguous use of 'cos'"
print(cos(180))             // receiver error "Ambiguous use of 'cos'"
print(cos(270))             // receiver error "Ambiguous use of 'cos'"

这些是不明确的,因为有两个版本的cos,这两种类型:

  • (Double) -> Double
  • (Float) -> Float

DoubleFloat都符合ExpressibleByIntegerLiteral,因此两者都可以用Int表示。关于Int应该表达的两种类型中的哪一种,这是不明确的。

如果您需要Double版本,可以通过以下方式调用:

  • cos(0 as Double)
  • cos(0.0)因为直接使用floatliteral作为Double优先于通过expressiblebyfloatliteral转换。

如果您想要Float version,可以使用:cos(0 as Float)

进行调用

在这两种情况下,如果上下文提供了足够的信息,则可以解决歧义。例如:

functionThatTakesADouble(cos(0)) // will use the `(Double) -> Double` version
functionThatTakesAFloat(cos(0)) // will use the `(Float) -> Float` version
print(cos(M_PI*0)) // M_PI is a Double, so 0 is treated as a Double

问题1.2

解决类型模糊之后,如下:

print(cos(0.0))   // 1.0
print(cos(90.0))  // -0.44807361612917
print(cos(180.0)) // -0.598460069057858
print(cos(270.0)) // 0.984381950632505

我们得到正确的答案。请记住,系统触发功能以弧度工作。

第2期

print(cos(M_PI*0))          // returns 1
print(cos(M_PI*1))          // returns -1
print(cos(M_PI*2))          // returns 1
print(cos(M_PI*3))          // returns -1

这些都是正确的值。

第3期

print(cos(M_PI*0))          // returns 1
print(cos(M_PI*90))         // returns 1
print(cos(M_PI*180))        // returns 1
print(cos(M_PI*270))        // returns 1

这些也是正确的。 <{1}}对cos弧度的每个偶数倍都是1

第4期

pi

print(cos(M_PI/M_PI-1)) // returns 1 print(cos(M_PI/M_PI+89)) // returns -0.44 print(cos(M_PI/M_PI+179)) // returns -0.59 print(cos(M_PI/M_PI+269)) // reutnrs 0.98 M_PI/M_PI(作为1.0),所以这些情况与第一个相同,但是需要额外的类型信息以允许编译器明确地选择{{1} } Double超过(Double) -> Double