i have two double arrays, let’s say A and B. i want to compare their results to 7 significant digits. will the following be correct to make the comparison?
k = pow(10,7);
for(...)
{
if(((int)A[i]*k)!=((int)B[i]*k))
{
...
}
}
Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.
Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.
Lost your password? Please enter your email address. You will receive a link and will create a new password via email.
Please briefly explain why you feel this question should be reported.
Please briefly explain why you feel this answer should be reported.
Please briefly explain why you feel this user should be reported.
No, this will not work.
The type cast operator has higher precedence than the multiplication operator. This means that
A[i]andB[i]will be cast to integers (and be truncated) before being multiplied by 1e7. 2.25 and 2.5 will end up being equal to your code. You can fix that by putting the multiplication in parentheses:(int)(A[i]*k)Also, since you’re relying on truncation instead of rounding, you may end up with incorrect results (depending on what you’re expecting).
1.0e-7and1.9e-7will be equal (1 == 1), while1.9e-7and2.1e-7will not (1 != 2). I suggest finding a function that will round properly with the behavior you desire.Also, your comparison does not deal with significant digits, it simply changes the value of the exponent. In the above examples, there are only 2 significant digits, however your code would only compare one of those digits because the value of the exponent is -7.
Here is some code that does what you want: