gpt4 book ai didi

java - 将一个数除以 5,得到重量比并用它来分割另一个数

转载 作者:行者123 更新时间:2023-12-01 09:01:23 25 4
gpt4 key购买 nike

举个例子就可以明白这个想法:

数字 A = 12数量 B = 20

我需要将 A 除以 5,直到不小于 5。所以我得到 3 部分:5,5 和 2。现在我必须使用这个结果来分割 B 给定刚刚计算的权重。所以 20 * (5/12)、20 * (5/12)、20* (2/12) 当然它们的总和必须完全等于 B(在我们的例子中为 20)

我必须在不损失任何精度的情况下执行此操作,并尝试使结果尽可能正确。我的示例是使用 int,但我也需要使用小数来实现这一点。(例如,A 可能是 12.37,B 可能是 20.13)有人知道这样做的库或提示吗?

最佳答案

嗯,这个问题(至少按照我的理解)很容易解决:

我们得到的是:AB,可能是十进制
我们想要的是:具有以下属性的序列 (a1, a2, ..., an) :

  • 序列中的任何元素都小于等于 5
  • 所有元素的总和为 A:a1 + a2 + ... + an = A
  • a1/A * B + a2/A * B + ... + an/A * B = B

是时候进行一些数学运算了:

B = //RHS => LHS
a1 / A * B + a2 / A * B + ... + an / A * B = //factorize
(a1 + a2 + ... + an) / A * B = //(a1 + a2 + ... + an) = A
B

或者换句话说:使用您喜欢的任何顺序。只要序列的元素总和为 A 并且都小于 - 等于 B 就可以了。

关于精度:
使用输入的类型不应该有任何精度问题,因为输出可以以仅包含输入的整数和小数部分的方式构建(所以实际上你的输出可能有更好的 -unused - 精度比输入)。

因此,要生成值a1/A * B、a2/A * B、...,我们需要执行以下操作:
使用 BigDecimal 获得最大精度 - 但要注意,B/A 可能是周期性的!其余的工作就像通常的方式一样,除了你需要使用方法而不是普通的运算符:

  • a + b 与 BigDecimal 将是 a.add(b)
  • a * b 与 BigDecimal 将是 a.multiply(b)
  • ...

您可以在 documentation 中查找详细信息.

关于java - 将一个数除以 5,得到重量比并用它来分割另一个数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41638725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com