Problem Link

Previous solution link

My above solution is running for some cases i.e., it was partially accepted , I made a small change in the code in Line 54:

temp+=(Math.ceil( ((float) (C[i]-mid))/(float)B[i]));

changed to

temp=temp-(mid/B[i])+A[i];

After doing this I got AC for all cases

New solution link

Please can anyone tell me why is this happening

In C/C++ , ceil() uses “double” type as its argument and returns “double” as well.Here, the value which is the argument of ceil() (c[i]-mid) can be as large as 10^18 which exceeds the range of “double”. Hence,ceil() returns unexpected value and you got WA for large numbers (The case is same in Java)

I tried it for 10^18 in c++ it’s returning

1e+09 when i use ceil

and 1000000000 when i am using other approach

Can you share your code?

Anyway,

```
#include <bits/stdc++.h>
using namespace std;
int main()
{
long double c=1000000000000000000.76;
cout << ceil(c) <<endl;
}
```

This won’t output 1000000000000000001. Instead will output 1000000000000000000 (1e+18)

PS: Don’t trust floating point numbers. They can’t be stored/represented accurately and they betray when you need them the most