Fix rounding issue due to non-associative floating arithmetic
Failing test
features/car/traffic_turn_penalties.feature:33
Tables were not identical:
    from |     to |     route |     speed |     time
|     a |     h |     ad,dhk,dhk |     63 km/h |     11.5s +-1 |
|     i |     g |     fim,fg,fg |     59 km/h |     12s  +-1 |
| (-) a | (-) e | (-) ad,de,de | (-) 57 km/h | (-) 12.5s +-1 |
| (+) a | (+) e | (+) ad,de,de | (+) 58 km/h | (+) 12.5s +-1 |
|     c |     g |     cd,de,ef,fg,fg |     63 km/h |     23s +-1 |
|     p |     g |     mp,fim,fg,fg |     61 km/h |     23.5s +-1 |
|     a |     l |     ad,dhk,kl,kl |     60 km/h |     24s +-1 |
|     l |     e |     kl,dhk,de,de |     59 km/h |     24.5s +-1 |
|     g |     n |     fg,fim,mn,mn |     57 km/h |     25s +-1 |
			
			
This commit is contained in:
		
							parent
							
								
									911d1e81b6
								
							
						
					
					
						commit
						3881ead8e5
					
				| @ -276,10 +276,13 @@ Coordinate interpolateLinear(double factor, const Coordinate from, const Coordin | |||||||
| { | { | ||||||
|     BOOST_ASSERT(0 <= factor && factor <= 1.0); |     BOOST_ASSERT(0 <= factor && factor <= 1.0); | ||||||
| 
 | 
 | ||||||
|     FixedLongitude interpolated_lon(((1. - factor) * static_cast<std::int32_t>(from.lon)) + |     const auto from_lon = static_cast<std::int32_t>(from.lon); | ||||||
|                                     (factor * static_cast<std::int32_t>(to.lon))); |     const auto from_lat = static_cast<std::int32_t>(from.lat); | ||||||
|     FixedLatitude interpolated_lat(((1. - factor) * static_cast<std::int32_t>(from.lat)) + |     const auto to_lon = static_cast<std::int32_t>(to.lon); | ||||||
|                                    (factor * static_cast<std::int32_t>(to.lat))); |     const auto to_lat = static_cast<std::int32_t>(to.lat); | ||||||
|  | 
 | ||||||
|  |     FixedLongitude interpolated_lon(from_lon + factor * (to_lon - from_lon)); | ||||||
|  |     FixedLatitude interpolated_lat(from_lat + factor * (to_lat - from_lat)); | ||||||
| 
 | 
 | ||||||
|     return {std::move(interpolated_lon), std::move(interpolated_lat)}; |     return {std::move(interpolated_lon), std::move(interpolated_lat)}; | ||||||
| } | } | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user