【问题标题】:Reduce the value of a random value of X over incremental increase in the value of Y in Java在 Java 中随着 Y 值的增量增加而减少 X 的随机值的值
【发布时间】:2014-05-03 11:11:35
【问题描述】:

我手头有点数学谜题。我有一个 X 的随机值,其中 X 是一个 0

我想根据 Y 的当前值将 X 的值减少一个增量百分比。最初我是这样做的。 getrand() 是一个外部函数,它在循环的每次迭代中为 X 返回一个新值。

Integer y = 0;
while (y < 1000)
{
    y = y + 1;
    Double x = getRand();  // any decimal value between 0 and 20
    x = x / y;
    // the value of X,Y then gets plotted on a map
    doPlot(x,y);
}

虽然这可行,但 X 的初始减少是 X / 2,然后是 X / 3.. 等等。我更喜欢 X 的线性(ish)或二次曲线样式缩减,它从 X 的小幅度缩减开始,随着 Y 的增大而变大,并且 X 永远不应为负数。

请记住,X 可能是一个小于 1 的十进制值。我仍然想将它减少一个百分比。我想了很多我可以做的事情,但是我的代码都充满了条件语句来检查 X 的值。

我怎样才能在简短而高效的 Java 中做到这一点?谢谢!

启发 - 在循环的每次迭代中,X 值是介于 0 和 20 之间的 新随机双精度值,它不是静态值。 X 可以是 0.00000001 也可以是 19.999999

【问题讨论】:

  • 您的“无限”循环将在超过 20 亿次迭代后溢出您的 Y(或者是 i?),之后 Y 将变成一个非常负数。 “可能是十进制”是什么意思?
  • 这是一个关于循环的理论问题。可能的十进制就是这样.. X 可能是 0.000000001 也可能是 19。
  • 我仍然对您的问题是数学问题还是编程问题感到困惑。编程中不存在理论问题(我没有说“计算机科学”)——你可以用真实的代码编程,也可以不用。这个问题可能更适合 Maths StackExchange 吗? math.stackexchange.com
  • 那么我会解决这个问题,这是一个编程问题。我的循环的“无限”部分是理论上的。实际上循环不可能有超过 100 次迭代,增量值对于我正在处理的应用程序来说是非常有限的。

标签: java math random integer double


【解决方案1】:

首先,该代码不执行任何操作。我知道这只是一个例子,但它甚至没有做你所说的,因为 X 每次迭代都会被丢弃。

无论如何,您需要确定您希望迭代采用多少时间步(因为它是线性的),然后在循环的每次迭代中减去相同的数量(而不是每次都除以不同的数字)。比如:

int timesteps = 10;
double x = getrand();
double subtractEachTime = x/timesteps;
for(int i = 0; i < timesteps; i++)
{
  x -= subtractEachTime;
}

另外请注意,您应该确保 x 等于循环结束时您实际想要的任何值,以避免浮点舍入错误。

这个例子将你从一个随机数带到零,但它可以概括为从任何数字到任何其他数字。这称为线性插值:http://en.wikipedia.org/wiki/Linear_interpolation

【讨论】:

  • X 应该在每次迭代中被丢弃,它是每次迭代中 0 到 20 之间的新随机双精度数。您的答案假定 X 是静态的并且是错误的。
  • 如果 X 每次都被扔掉,那么你的代码什么也做不了。
【解决方案2】:

听起来您对自己想要做什么没有清晰的认识。以下是对代码的猜测,该代码将作为(x,i,getRand()) 的函数不断减少x

int i = 0;
double x = getrand();
while(true){
    double a_number_less_than_one = getRand()/(i+1)*20;
    x = x/a_number_less_than_one;
    i++;
    System.out.println(x);
}

【讨论】:

  • 再一次,假设 X 是静态的.. 它不是。 X 在循环的每次迭代中都是介于 0 和 20 之间的新双精度数。请重新阅读我很清楚我想做什么的问题。
猜你喜欢
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
  • 2021-12-02
  • 2013-04-08
相关资源
最近更新 更多