1
0
mirror of https://github.com/duke-git/lancet.git synced 2026-02-04 12:52:28 +08:00

feat: add Cos and Sin function

This commit is contained in:
dudaodong
2023-05-25 17:51:40 +08:00
parent e149ae2f72
commit 67c1b54b5a
2 changed files with 42 additions and 0 deletions

View File

@@ -301,3 +301,25 @@ func lcm[T constraints.Integer](a, b T) T {
}
return a * b / gcd(a, b)
}
// Cos returns the cosine of the radian argument.
// Play: todo
func Cos(radian float64, precision ...int) float64 {
t := 1.0 / (2.0 * math.Pi)
radian *= t
radian -= 0.25 + math.Floor(radian+0.25)
radian *= 16.0 * (math.Abs(radian) - 0.5)
radian += 0.225 * radian * (math.Abs(radian) - 1.0)
if len(precision) == 1 {
return TruncRound(radian, precision[0])
}
return TruncRound(radian, 3)
}
// Cos returns the sine of the radian argument.
// Play: todo
func Sin(radian float64, precision ...int) float64 {
return Cos((math.Pi / 2) - radian)
}

View File

@@ -249,3 +249,23 @@ func TestLCM(t *testing.T) {
assert.Equal(2, LCM(1, 2))
assert.Equal(18, LCM(3, 6, 9))
}
func TestCos(t *testing.T) {
assert := internal.NewAssert(t, "TestCos")
assert.EqualValues(1, Cos(0))
assert.EqualValues(-0.447, Cos(90))
assert.EqualValues(-0.598, Cos(180))
assert.EqualValues(-1, Cos(math.Pi))
assert.EqualValues(0, Cos(math.Pi/2))
}
func TestSin(t *testing.T) {
assert := internal.NewAssert(t, "TestSin")
assert.EqualValues(0, Sin(0))
assert.EqualValues(0.894, Sin(90))
assert.EqualValues(-0.801, Sin(180))
assert.EqualValues(0, Sin(math.Pi))
assert.EqualValues(1, Sin(math.Pi/2))
}