Why there is wrong output of ceil and floor values in this code :
enter code here
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
float y = 99999980;
float z =-99999980;
ll x = ceil(y);
ll q = floor(z);
cout<<x<<endl<<q<<endl;
}
output is
99999984
-99999984
1 Like
can any one explain me why such thing is happening ?
@worldunique
Try these commands-
printf("%f\n",(float)99999980.0);
printf("%f\n",99999980.0);
printf("%f\n",x);
printf("%f\n",y);
printf("%.55f\n",10.1);
By default xxxx.xxx are treated as double in c/c++. when you save as float it is saved as 99999984.0
Due to small size of float. which often results in round off of floats.
https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
Round off section. As 99999980.0 is large number it is saved as 99999984.0 when stored in float data type.
And hence the reason for wrong input.
This is also the reason why using == operations with floats/double is not considered as safe.
3 Likes
yes that should be the reason . even when i am printing y and z
it is giving
1e+08
&
-1e+08
Thanks for the explanation !
@vijju123 seen u after 3 days !!
Hmm. I can think of 3 instances-
- When you become a 7 star
- When you get a good placement and job from college and your parents start looking for your
*dramatic cough*
- When you decide to give us all a treat :3 :o
1 Like
Third one is the one i expect to be the sooner one of all three. @vijju123
btw, Nice answer @aryanc403
2 Likes
Thank you @vijju123 @taran_1407 @worldunique
This was my first answer on codechef forum and got accepted.
Thank you.
2 Likes