strange casting problem

From: Nevzat Guler <nguler_at_jlab.org>
Date: Thu, 24 Apr 2008 19:29:51 -0400

Hello,
I apologize for bringing here non-root problem but I discovered it in my root program and also tested with a stand alone C Program. I attached the simple program to the email and printed at the end ... The problem is, when I convert a float to int, I have value offset. Below you can see some examples. The problem appears between 113 and 119. I used g++ -o tt tt.cc to complie the attached program and run it. I am very puzzled and thought maybe you can help on this.

Best Regards,

aa=110 int(aa)=110 ceil(aa)=110 floor(aa)=110
aa=111 int(aa)=111 ceil(aa)=112 floor(aa)=111
aa=112 int(aa)=112 ceil(aa)=113 floor(aa)=112

aa=113 int(aa)=112 ceil(aa)=113 floor(aa)=112
aa=114 int(aa)=113 ceil(aa)=114 floor(aa)=113
aa=115 int(aa)=114 ceil(aa)=115 floor(aa)=114
aa=116 int(aa)=115 ceil(aa)=116 floor(aa)=115
aa=117 int(aa)=116 ceil(aa)=117 floor(aa)=116
aa=118 int(aa)=117 ceil(aa)=118 floor(aa)=117 aa=119 int(aa)=118 ceil(aa)=119 floor(aa)=118
aa=120 int(aa)=120 ceil(aa)=120 floor(aa)=120
aa=121 int(aa)=121 ceil(aa)=121 floor(aa)=121
aa=122 int(aa)=122 ceil(aa)=122 floor(aa)=122
aa=123 int(aa)=123 ceil(aa)=123 floor(aa)=123
aa=124 int(aa)=124 ceil(aa)=124 floor(aa)=124
aa=125 int(aa)=125 ceil(aa)=125 floor(aa)=125
aa=126 int(aa)=126 ceil(aa)=126 floor(aa)=126
aa=127 int(aa)=127 ceil(aa)=127 floor(aa)=127
aa=128 int(aa)=128 ceil(aa)=128 floor(aa)=128





#include <stdlib.h>
#include <iostream>
#include <iomanip>
#include <stdio.h>
#include <math.h>

using namespace std;
//// for non-standard W bins (W_start is usually 0.0) int GetWIndex(double W, double W_start, double W_width) {

    double aa = W/W_width ;
    cout<<"aa="<<aa<<" int(aa)="<<int(aa)<<" ceil(aa)="<<ceil(aa)<<" floor(aa)="<<floor(aa)<<endl;

    return int(aa);

}

int main(int argc, char** argv)
{
  double val=1.15;
  if(argc>1) val=atof(argv[1]);
  GetWIndex(val,0.0,0.01);
  return 0;
}

                                Nevzat Guler

Received on Fri Apr 25 2008 - 01:30:00 CEST

This archive was generated by hypermail 2.2.0 : Fri Apr 25 2008 - 05:50:03 CEST