ฉันต้องการสร้างคำตอบของ John Kugelman โดยไม่ต้องแทนที่ด้วยการแก้ไขโดยตรง มันใช้ได้กับกรณีทดสอบของเขา ( MIN_VALUE = -10
, MAX_VALUE = 10
) เนื่องจากความสมมาตรMIN_VALUE == -MAX_VALUE
ซึ่งไม่ใช่กรณีของจำนวนเต็มบวกของสองตัว ในความเป็นจริงMIN_VALUE == -MAX_VALUE - 1
.
scala> (java.lang.Integer.MIN_VALUE, java.lang.Integer.MAX_VALUE)
res0: (Int, Int) = (-2147483648,2147483647)
scala> (java.lang.Long.MIN_VALUE, java.lang.Long.MAX_VALUE)
res1: (Long, Long) = (-9223372036854775808,9223372036854775807)
เมื่อนำไปใช้กับจริงMIN_VALUE
และMAX_VALUE
คำตอบของ John Kugelman จะให้กรณีล้นเมื่อใดa == -1
และb ==
สิ่งอื่นใด (ชี้ก่อนโดย Kyle) นี่คือวิธีแก้ไข:
long maximum = Long.signum(a) == Long.signum(b) ? Long.MAX_VALUE : Long.MIN_VALUE;
if ((a == -1 && b == Long.MIN_VALUE) ||
(a != -1 && a != 0 && ((b > 0 && b > maximum / a) ||
(b < 0 && b < maximum / a))))
{
}
มันไม่ได้เป็นวิธีการแก้ปัญหาทั่วไปสำหรับการใด ๆMIN_VALUE
และMAX_VALUE
แต่มันเป็นข้อมูลทั่วไปของ Java Long
และInteger
และความคุ้มค่าของการใด ๆและa
b