From bf0dbb22d0c0e1a410892c640cf3202523f2c95a Mon Sep 17 00:00:00 2001 From: ThorstenB Date: Fri, 16 Nov 2012 22:46:41 +0100 Subject: [PATCH] #931: some VOR+ILS stations not working on 32bit machines When casting to int, always remember the ugly effects of floating-point (im)precisions ;-). --- src/Navaids/navlist.cxx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Navaids/navlist.cxx b/src/Navaids/navlist.cxx index 0beae3f0f..d63b958f6 100644 --- a/src/Navaids/navlist.cxx +++ b/src/Navaids/navlist.cxx @@ -169,7 +169,7 @@ FGNavRecord *FGNavList::findByFreq( double freq, const SGGeod& position, TypeFilter* filter) { flightgear::NavDataCache* cache = flightgear::NavDataCache::instance(); - int freqKhz = static_cast(freq * 100); + int freqKhz = static_cast(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(freq * 100); + int freqKhz = static_cast(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(freq * 1000); + int freqKhz = static_cast(freq * 1000 + 0.5); PositionedIDVec ids(cache->findNavaidsByFreq(freqKhz, position, filter)); BOOST_FOREACH(PositionedID id, ids) { -- 2.39.5