在 Java 中查找两对变量的最接近乘积

Finding closest product of two pairs of variables in Java

我有四个变量,比如a,b,c,d

为简单起见,假设 a=59.8,c=22

我正在尝试查找是否存在 ab - cd = 0,当出现这种情况时,b 的值是多少,d.Or 当 a b - cd不可能为0,当ab - cd的值最小时求b,d。

有算法吗?我希望在 Java.

中解决它

首先,不失一般性地假设(确实如此)ac 也是整数(不是 int 而是实际整数)。

等式a * b = c * d其中ac是常数很容易求解,选择b = c
d = a,现在等式两边都是a * c.

如果 ac 不是整数怎么办?没问题,只需将它们缩放为 2 的幂即可。它们是双精度数,因此可以保证有一个 2 的幂将它们都缩放为整数(双精度数是按 2 的某个幂缩放的整数)。现在我们有

(a * p) * b = (c * q) * d

其中 pq 是两个的幂,因此 a * p 是一个整数,c * q 是一个整数。

选择b = c * qd = a * p,两边又一样了。很明显,您可以将这些额外的因子合并到 bd 中,只需重新关联乘法即可。