在 Java 中查找两对变量的最接近乘积
Finding closest product of two pairs of variables in Java
我有四个变量,比如a,b,c,d
- a,c 是双倍的
- b,d为整数
- a != c
为简单起见,假设 a=59.8,c=22
我正在尝试查找是否存在 ab - cd = 0,当出现这种情况时,b 的值是多少,d.Or 当 a b - cd不可能为0,当ab - cd的值最小时求b,d。
有算法吗?我希望在 Java.
中解决它
首先,不失一般性地假设(确实如此)a
和 c
也是整数(不是 int
而是实际整数)。
等式a * b = c * d
其中a
和c
是常数很容易求解,选择b = c
和
d = a
,现在等式两边都是a * c
.
如果 a
或 c
不是整数怎么办?没问题,只需将它们缩放为 2 的幂即可。它们是双精度数,因此可以保证有一个 2 的幂将它们都缩放为整数(双精度数是按 2 的某个幂缩放的整数)。现在我们有
(a * p) * b = (c * q) * d
其中 p
和 q
是两个的幂,因此 a * p
是一个整数,c * q
是一个整数。
选择b = c * q
、d = a * p
,两边又一样了。很明显,您可以将这些额外的因子合并到 b
和 d
中,只需重新关联乘法即可。
我有四个变量,比如a,b,c,d
- a,c 是双倍的
- b,d为整数
- a != c
为简单起见,假设 a=59.8,c=22
我正在尝试查找是否存在 ab - cd = 0,当出现这种情况时,b 的值是多少,d.Or 当 a b - cd不可能为0,当ab - cd的值最小时求b,d。
有算法吗?我希望在 Java.
中解决它首先,不失一般性地假设(确实如此)a
和 c
也是整数(不是 int
而是实际整数)。
等式a * b = c * d
其中a
和c
是常数很容易求解,选择b = c
和
d = a
,现在等式两边都是a * c
.
如果 a
或 c
不是整数怎么办?没问题,只需将它们缩放为 2 的幂即可。它们是双精度数,因此可以保证有一个 2 的幂将它们都缩放为整数(双精度数是按 2 的某个幂缩放的整数)。现在我们有
(a * p) * b = (c * q) * d
其中 p
和 q
是两个的幂,因此 a * p
是一个整数,c * q
是一个整数。
选择b = c * q
、d = a * p
,两边又一样了。很明显,您可以将这些额外的因子合并到 b
和 d
中,只需重新关联乘法即可。