Implement sin(x) with precision constraints
Company: Snapchat
Role: Software Engineer
Category: Coding & Algorithms
Difficulty: medium
Interview Round: Technical Screen
## Coding Question: Implement `sin(x)`
Implement a function that returns an approximation of the trigonometric sine function.
### Function signature
- Input: a real number `x` (in radians)
- Output: `sin(x)` as a floating-point number
### Restrictions
- Do **not** call library trig functions (e.g., `sin`, `cos`, `tan`).
- You may use basic arithmetic operations and constants.
### Accuracy requirement
- Your result must satisfy: \(|\text{ans} - \sin(x)| \le \varepsilon\)
- Assume the interviewer provides a specific `ε` (e.g., `1e-6`).
### Follow-ups
1. After writing a straightforward version, describe how you would **optimize** it (time and/or numerical stability).
2. In real systems, how would you further **engineer** this function for performance and reliability (e.g., handling large `|x|`, speed, testing, edge cases)?
### Notes
- You may assume IEEE-754 `double` behavior.
- Consider how your implementation behaves for very large magnitude `x` and near special points (e.g., around `0`, `π`, `π/2`).
Quick Answer: This question evaluates understanding of numerical methods, floating-point arithmetic, and algorithmic implementation in the Coding & Algorithms domain by requiring an approximation of the sine function under explicit error bounds.
Approximate sine without calling library trig functions, using range reduction and a Taylor series.
Constraints
- Do not call math.sin/cos/tan
Examples
Input: (0.0, 1e-08)
Expected Output: 0.0
Explanation: sin(0).
Input: (1.5707963267948966, 1e-08)
Expected Output: 1.0
Explanation: Near pi/2.
Input: (-0.5235987755982988, 1e-08)
Expected Output: -0.5
Explanation: Negative angle.
Input: (31.41592653589793, 1e-08)
Expected Output: -0.0
Explanation: Large multiple of pi after reduction.
Hints
- Reduce x to [-pi, pi], then evaluate the alternating Taylor series.