Gần đây tôi đã gặp phải một vấn đề có thể dễ dàng giải quyết bằng cách sử dụng phân chia mô-đun, nhưng đầu vào là một float:
Cho một hàm tuần hoàn (ví dụ
sin
) và một hàm máy tính chỉ có thể tính toán nó trong phạm vi chu kỳ (ví dụ [-π, π]), hãy tạo một hàm có thể xử lý bất kỳ đầu vào nào.
Giải pháp "hiển nhiên" là một cái gì đó như:
#include <cmath>
float sin(float x){
return limited_sin((x + M_PI) % (2 *M_PI) - M_PI);
}
Tại sao điều này không hoạt động? Tôi gặp lỗi này:
error: invalid operands of types double and double to binary operator %
Điều thú vị là nó hoạt động bằng Python:
def sin(x):
return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)
sin(x)
các giá trị lớnx
thực sự đòi hỏi một quá trình giảm đối số siêu nghiệm rất khó khăn mà không thể thực hiện được với bất kỳ xấp xỉ hữu hạn nào của pi.