【问题标题】:Best way to get a number from a range?从范围内获取数字的最佳方法?
【发布时间】:2014-04-05 08:01:16
【问题描述】:

这有点偏向数学,但我想知道执行以下操作的最佳方法;

min = 20;
max = 80;

给定一个从 1 到 x 的数字,线性均匀分布这些数字的最佳方法是什么?

例如,当n=1 的值始终为最小值时,n=x 的值始终为最大值,因此在这种情况下为 80。

n=x/2 值为 35(最小值和最大值之间的中点)时

如果这是一个像double getNum(min, max, x, n) 这样的函数,它返回最小值/最大值之间的数值,那么最好的写法是什么?

【问题讨论】:

  • 抱歉措辞,这很难概念化
  • 鉴于您需要整数,最佳答案取决于您希望如何进行舍入,而这又取决于您要将这些数字用于什么目的。你想用这些数字做什么?
  • 实际不一定要四舍五入,可以是十进制数。
  • 当我在这里时,有没有像这样的函数的实际名称?之前一定有人这样做过吧?
  • 不知道具体的名字,但肯定已经完成了。

标签: math


【解决方案1】:

推导出以下公式非常简单:

double nth(double min, double max, int n, int x) {
    return min + (max-min) * ((double) n-1) / (x-1);
}

【讨论】:

  • 为什么 nth(1, 100, 5, 10);输出 45 而不是 50?
  • @user1008134:因为步数是 1、12、23、34、45、56、67、78、89、100。如果您预期为 50,那么您有一个 fencepost 错误。也许您希望n 从 0 而不是 1 开始? (如果这样做,您还需要将呼叫更改为nth(0, 100, 5, 10),以及更改nth 内部的逻辑。)
  • 啊,我明白了,那么你的实现是正确的。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-15
  • 1970-01-01
  • 2019-05-20
  • 1970-01-01
相关资源
最近更新 更多