三角函数 (cos) 向计算器返回不同的值
Trigonometry Function (cos) Returning Different Value to a Calculator
当我在计算器上使用cos函数时cos(0) = 1, cos(90) = 0 cos(180) = -1 and cos(270) = 0。但是我不知道如何在我的代码中产生这些结果。我在代码中收到的结果要么是 1 要么是 -1,但绝不是 0。下面是我的尝试,none 给我的结果与计算器的结果相同,我错过了什么?
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
}
Darwin
三角函数以弧度表示。
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
Double
和Float
都符合ExpressibleByIntegerLiteral
,所以都可以用Int
表示。 Int
应该表达两种类型中的哪一种是不明确的。
如果你想要Double
版本,你可以调用它:
cos(0 as Double)
cos(0.0)
因为直接使用浮点数作为 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
这些也是正确的。 cos
是 1
对于每个 pi
弧度的偶数倍。
第 4 期
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
(作为 Double
),因此这些情况等同于第一种情况,但具有允许编译器明确选择 (Double) -> Double
cos
超过 (Float) -> Float
.
当我在计算器上使用cos函数时cos(0) = 1, cos(90) = 0 cos(180) = -1 and cos(270) = 0。但是我不知道如何在我的代码中产生这些结果。我在代码中收到的结果要么是 1 要么是 -1,但绝不是 0。下面是我的尝试,none 给我的结果与计算器的结果相同,我错过了什么?
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
}
Darwin
三角函数以弧度表示。
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
Double
和Float
都符合ExpressibleByIntegerLiteral
,所以都可以用Int
表示。 Int
应该表达两种类型中的哪一种是不明确的。
如果你想要Double
版本,你可以调用它:
cos(0 as Double)
cos(0.0)
因为直接使用浮点数作为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
这些也是正确的。 cos
是 1
对于每个 pi
弧度的偶数倍。
第 4 期
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
(作为 Double
),因此这些情况等同于第一种情况,但具有允许编译器明确选择 (Double) -> Double
cos
超过 (Float) -> Float
.