在夹紧范围内从一个数字到另一个数字的最短路径

时间:2015-05-16 10:07:06

标签: c# floating-point range

我有一个float,它被夹在另外两个floats之间,形成了一系列可能的值。在我的设置中,如果值超过范围的任一端点,它将流向另一端。也就是说,如果值被钳制在0到10之间并且值本身为9,则向它添加2使其流向0(9 -> 10 -> 0

我需要计算范围内两个值之间的最短“路径”,所以如果我想知道从2到9的最短路径,它将是2 -> 1 -> 0 -> 10 -> 9,这意味着我将不得不减去4来自它。

我一直试图找出解决方案,但我无法解决这个问题。

1 个答案:

答案 0 :(得分:1)

至于你的例子,当计算溢出时,从上限值到下限需要1。所以我用它作为常数。

float a,b, bound1, bound2; // input data
var path1 = b - a; // straight way
var absPath1 = Math.Abs(path1);
var range = bound2 - bound1;
var path2 = range - absPath1 + 1;
if(b > a) path2 = -path2;
var absPath2 = Math.Abs(path2);
var shortestPath = absPath1 > absPath2 ? path1 : path2;