如何检查一个数字是否可以被2 * M_PI整除在C++中?
这是我用2 * M_PI检查数字的可分性所做的工作。 “w”是2/3的常数,t是变量t + = dt的变量,其中dt为0.1。我试图使用mod运算符%来查看是否有可分割的东西。但它不工作。如何检查一个数字是否可以被2 * M_PI整除在C++中?
bool divisible; real w = 2/3; real t;
if((w*t) % 2*M_PI == 0)
{
divisible = true;
}
else
{
divisible = false;
}
这是我得到的,“类型‘真实’和‘INT’的无效操作数为二进制‘操作符%’”
这是什么意思的错误?我如何得到这个工作?那么我需要让w和t成为int吗?它们不能是因为w是2/3,并且t从0增加0.1。有人可以帮帮我吗?
改为使用std::fmod
,它运行在双打而不是整数%
运营商。
并注意舍入误差,即不要使用'=='进行比较,而是看看您是否在所需值的可接受的ε内。 – Waldheinz 2011-05-30 10:09:14
我正在编译错误,w是双精度型,t是双精度型,而M_PI是我认为的浮点数?应该,fmod((w * t)/(2 * M_PI))是否工作? – QEntanglement 2011-05-30 10:21:39
@QEntanglement,你看过这个函数的签名吗?我故意留下了一个链接(即为你做一个侧面思考!)) – Nim 2011-05-30 10:23:32
“%”是整数模运算符不工作的浮动/ double参数/操作数
有存在于文件math.h浮法/双MODF功能这可能有助于
- 一个示例可以是在例如
为什么你想知道如果一个浮点数是正是被另一个整除?
浮点运算不应用于“精确”计算。每个操作的结果都是严格定义的,但它不同于同一操作的数学意义。 特别是:
double a = 1e20;
double b = 1e-20;
double c = (a + b) - a;
你可能会以为c
将等于b
,但实际上它不会!
您应该只将浮点数与某个窗口进行比较。意思是 - 特定的浮点值是否在某个有限长度范围内。
只要检查'cos(w * t)== 0';) – MSalters 2012-12-10 11:00:19