M
Size: a a a
M
M
Math.max(12, 12); // 12
L
M
M
M
L
M
L
M
M
L
N
L
L
N
L
N
L
const getMax = (a, b, abs, c) => (
abs = n => (n**2)**0.5,
c = a - b,
c = abs(c + 1) - abs(c),
(a * (c + 1) - b * (c - 1)) / 2
)
function _testHelp(r) {
if ( Math.random() < 0.3 ) {
a = b = r()
} else
if ( Math.random() <= 0.6 ) {
do {
a = r()
b = r()
} while( Math.max(a, b) !== a )
} else {
do {
a = r()
b = r()
} while( Math.max(a, b) !== b )
}
return [a, b]
}
function testInt(getMax, count = 1e6) {
const r = () => (Math.random() - 0.5) * 1e6 | 0
for(let i = 0; i < count; i++) {
let [a, b] = _testHelp(r)
if ( getMax(a, b) !== Math.max(a, b) ) {
console.error(`testInt, max(${a}, ${b}) invalid`);
return false;
}
}
return true;
}
function testFloat(getMax, count = 1e6) {
const r = () => (Math.random() - 0.5) * 1e6
for(let i = 0; i < count; i++) {
let [a, b] = _testHelp(r)
if ( getMax(a, b) !== Math.max(a, b) ) {
console.error(`testFloat, max(${a}, ${b}) invalid`);
return false;
}
}
return true;
}
testInt(getMax, 1e6)
testFloat(getMax, 1e6)
S
const getMax = (a, b, abs, c) => (
abs = n => (n**2)**0.5,
c = a - b,
c = abs(c + 1) - abs(c),
(a * (c + 1) - b * (c - 1)) / 2
)
function _testHelp(r) {
if ( Math.random() < 0.3 ) {
a = b = r()
} else
if ( Math.random() <= 0.6 ) {
do {
a = r()
b = r()
} while( Math.max(a, b) !== a )
} else {
do {
a = r()
b = r()
} while( Math.max(a, b) !== b )
}
return [a, b]
}
function testInt(getMax, count = 1e6) {
const r = () => (Math.random() - 0.5) * 1e6 | 0
for(let i = 0; i < count; i++) {
let [a, b] = _testHelp(r)
if ( getMax(a, b) !== Math.max(a, b) ) {
console.error(`testInt, max(${a}, ${b}) invalid`);
return false;
}
}
return true;
}
function testFloat(getMax, count = 1e6) {
const r = () => (Math.random() - 0.5) * 1e6
for(let i = 0; i < count; i++) {
let [a, b] = _testHelp(r)
if ( getMax(a, b) !== Math.max(a, b) ) {
console.error(`testFloat, max(${a}, ${b}) invalid`);
return false;
}
}
return true;
}
testInt(getMax, 1e6)
testFloat(getMax, 1e6)