简单的数学问题

时间:2011-01-05 11:47:04

标签: c# .net algorithm math

我的数据集包含0到m之间的n个值。

现在我想在min和max之间的范围内映射这些值。但是我该怎么做?如果我在每个对象中都有这种方法:

public double getValue(int min, int max) {
   // return value between min and max;
}

我想要这项工作吗?

3 个答案:

答案 0 :(得分:5)

尝试:

return min + (max - min) * (val / m);

答案 1 :(得分:3)

如果您正在讨论将范围0..m映射到min..max,那肯定只是一个问题:

newval = val * (max - min) / m + min

当然允许任何整数/浮点陷阱,如无意的舍入。

乘以(max - min) / m会将其缩放到正确的范围,添加min会为其提供正确的较低偏移量。

答案 2 :(得分:2)

此代码更通用(不仅仅是0米范围,而是任何原始范围):

public double GetValue(int value, 
                       int min, 
                       int max, 
                       int originalMin, 
                       int originalMax) 
{
   return min + (double)(value - originalMin) * (max - min) / (originalMax - originalMin);
}
// in your case originalMin = 0, and originalMax = m