我最近遇到了一个问题,可以使用模数除法轻松解决,但是输入是浮点数:
给定一个周期性函数(例如
sin
)和只能在周期范围内计算它的计算机功能(例如[-π,π]),则使一个函数可以处理任何输入。
“显而易见的”解决方案是这样的:
#include <cmath>
float sin(float x){
return limited_sin((x + M_PI) % (2 *M_PI) - M_PI);
}
为什么不起作用?我收到此错误:
error: invalid operands of types double and double to binary operator %
有趣的是,它确实适用于Python:
def sin(x):
return limited_sin((x + math.pi) % (2 * math.pi) - math.pi)
sin(x)
较大的值x
实际上需要一个非常困难的先验论证简化过程,而pi的任何有限逼近都无法实现。