Bug in TAxis::FindBin?

I modified a bit your macro:

int GetRightBin(TAxis *ax, Double_t x) {
   int retVal = 1+int(ax->GetNbins()*(x-ax->GetXmin())/(ax->GetXmax()-ax->GetXmin()) + 0.5);
   return retVal;
}

void TAxisBug (int nBins = 30, Double_t xMin=3.0, Double_t xMax=6.0)
{
   //
   // Test TAxis bug
   //
   TAxis *ax = new TAxis (nBins, xMin, xMax);
   cout << "Root version : " << gROOT->GetVersion() << endl;
   cout << "+----+------+--------+----++------+--------+----+" << endl;
   cout << "| Id | Low  | Center | Up || Low  | Center | Up |" << endl;
   cout << "+----+------+--------+----++------+--------+----+" << endl;
   cout << "|    |      FindBin       ||   GetRightBin      |" << endl;
   cout << "+----+------+--------+----++------+--------+----+" << endl;
   for (int i=1;i<=8;i++) {
      cout << "| " << i;
      if (i == ax->FindBin (ax->GetBinLowEdge (i))) cout << "  |  " << ax->FindBin (ax->GetBinLowEdge (i));
      else                                          cout << "  |  \033[1;31m" << ax->FindBin (ax->GetBinLowEdge (i)) << "\033[0m";
      if (i == ax->FindBin (ax->GetBinCenter (i)))  cout << "   |   " << ax->FindBin (ax->GetBinCenter (i));
      else                                          cout << "   |   \033[1;31m" << ax->FindBin (ax->GetBinCenter (i)) << "\033[0m";
      if (i == ax->FindBin (ax->GetBinUpEdge (i)))  cout << "    | " << ax->FindBin (ax->GetBinUpEdge (i));
      else                                          cout << "    | \033[1;31m" << ax->FindBin (ax->GetBinUpEdge (i)) << "\033[0m";

      if (i == GetRightBin(ax,ax->GetBinLowEdge (i))) cout << "  ||  " << GetRightBin(ax,ax->GetBinLowEdge (i));
      else                                            cout << "  ||  \033[1;31m" << GetRightBin(ax,ax->GetBinLowEdge (i)) << "\033[0m";
      if (i == GetRightBin(ax,ax->GetBinCenter (i)))  cout << "   |   " << GetRightBin(ax,ax->GetBinCenter (i));
      else                                            cout << "   |   \033[1;31m" << GetRightBin(ax,ax->GetBinCenter (i)) << "\033[0m";
      if (i == GetRightBin(ax,ax->GetBinUpEdge (i)))  cout << "    | " << GetRightBin(ax,ax->GetBinUpEdge (i));
      else                                            cout << "    | \033[1;31m" << GetRightBin(ax,ax->GetBinUpEdge (i)) << "\033[0m";
      cout << "  |" << endl;
    }
   cout << "+----+------+--------+----++------+--------+----+" << endl;
}

it gives:

As you can see your version (GetRightBin) has problem with the bin center.