【发布时间】: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