繁体   English   中英

如何生成浮点数的随机分区,并且每个部分的最小值为pMin?

[英]How to generate random partitions of float number and each part has minimum value pMin?

例如:

我想将33.38分为5个部分,每个部分等于或大于1.2:

2.71,3.3,18.7,1.56,7.11

伪代码中的功能:

public static void printRandomPartition(float value,int numberOfParts,float pMin){
}

public static void main(String[] args){
    //it will print 2.71,3.3,18.7,1.56,7.11
    printRandomPartition(33.38,5,1.2);
}

另一种情况:

将18.77分为3部分,每部分等于或大于3.2:

4.8,9.55,4.42

当然,输入和输出可能是丑陋的浮点数,例如3.82000000000003,这仅是示例。

我搜索了一些有关它的文章,但似乎大多数都与整数有关,并且用于整数的方法通常使用数组int myArray [n](n是要除数的整数),这对处理浮点数没有用。 有人可以帮忙吗?

伪代码

function Divide(Sum, NParts, MinValue)
  //subtract minimal values to deal with corrected sum
  ASum = Sum - MinValue * NParts

  //generate uniform randoms (in any reasonable range), take their sum    
  BSum = 0
  for i = 0.. NParts - 1
     Part[i] = Random
     BSum = BSum + Part[i]

  //scale randoms to get right corrected sum, then add minimal value to get initial sum
  for i = 0.. NParts - 1
     Part[i] = Part[i] * ASum / BSum + MinValue

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM