]> git.mxchange.org Git - flightgear.git/commitdiff
#931: some VOR+ILS stations not working on 32bit machines
authorThorstenB <brehmt@gmail.com>
Fri, 16 Nov 2012 21:46:41 +0000 (22:46 +0100)
committerThorstenB <brehmt@gmail.com>
Fri, 16 Nov 2012 21:46:41 +0000 (22:46 +0100)
When casting to int, always remember the ugly effects of floating-point
(im)precisions ;-).

src/Navaids/navlist.cxx

index 0beae3f0ff5a8634004bebb8cfac7086fd521108..d63b958f648616da0b04f03947e75cf6a455966b 100644 (file)
@@ -169,7 +169,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
                                    TypeFilter* filter)
 {
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
-  int freqKhz = static_cast<int>(freq * 100);
+  int freqKhz = static_cast<int>(freq * 100 + 0.5);
   PositionedIDVec stations(cache->findNavaidsByFreq(freqKhz, position, filter));
   if (stations.empty()) {
     return NULL;
@@ -205,7 +205,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position,
 FGNavRecord *FGNavList::findByFreq( double freq, TypeFilter* filter)
 {
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
-  int freqKhz = static_cast<int>(freq * 100);
+  int freqKhz = static_cast<int>(freq * 100 + 0.5);
   PositionedIDVec stations(cache->findNavaidsByFreq(freqKhz, filter));
   if (stations.empty()) {
     return NULL;
@@ -227,7 +227,7 @@ nav_list_type FGNavList::findAllByFreq( double freq, const SGGeod& position,
   nav_list_type stations;
   
   flightgear::NavDataCache* cache = flightgear::NavDataCache::instance();
-  int freqKhz = static_cast<int>(freq * 1000);
+  int freqKhz = static_cast<int>(freq * 1000 + 0.5);
   PositionedIDVec ids(cache->findNavaidsByFreq(freqKhz, position, filter));
   
   BOOST_FOREACH(PositionedID id, ids) {