#javascript #math
#javascript #математика
Вопрос:
// Number of rockets launched per second.
const rocketSpeed = 1;
// The amount of damage dealt by rocket.
const attackDamage = 60;
// The amount of hit points of the building.
const buildingHitPoints = 1000;
// The number of rockets required to destroy the building.
const numberOfRockets = Math.ceil(buildingHitPoints / attackDamage);
// The time it takes to destroy the building.
const requiredTime = numberOfRockets * rocketSpeed;
Если rocketSpeed
это больше одной секунды, то я получаю правильное значение.
Например: const requiredTime = 17 * 1
;
Но если вы укажете rocketSpeed
менее 1 секунды, то значение будет неверным:
Например: const requiredTime = 17 * 0.625; // 10.625
0,625 — это количество ракет, выпущенных в секунду. То есть 1 ракета будет запущена примерно за ~ 1,2 секунды.
Я пробовал разные варианты по типу: const requiredTime = 17 (17 - 37.5%);
(37,5%, потому что: 1000 — 625 = 375. 375 составляет 37,5% от 1000), но это не работает.
Комментарии:
1. Разделите 1 на скорость ракеты, так что это: numberOfRockets / (1 / Скорость ракеты)
2. Используйте анализ размеров на
requiredTime = numberOfRockets * rocketSpeed
. Какова единица измеренияrequiredTime
? Вы видите ошибку?
Ответ №1:
Количество ракет, запускаемых в секунду, лучше рассматривать как частоту, а не как «скорость».
Частота f равна f = 1/ T, где время равно T, поэтому T = 1 / f
Возможно, переименовать rocketSpeed в rocketFrequency и создать новую переменную timeBetweenRockets с
const timeBetweenRockets = 1 / rocketFrequency
.
Тогда последняя строка кода будет более самоописывающейся
const requiredTime = numberOfRockets * timeBetweenRockets
Ответ №2:
У вас неправильный расчет. Если вы попробуете использовать значения больше 1, то увидите, что это займет больше времени: 1 ракета в секунду (r / s) приводит к 17 секундам. 2 r / s дает 34 секунды, а 0,5 r / s дает 10,625 секунды.
const calculate = rocketSpeed => {
// The amount of damage dealt by rocket.
const attackDamage = 60;
// The amount of hit points of the building.
const buildingHitPoints = 1000;
// The number of rockets required to destroy the building.
const numberOfRockets = Math.ceil(buildingHitPoints / attackDamage);
// The time it takes to destroy the building.
const requiredTime = numberOfRockets * rocketSpeed;
return requiredTime;
}
console.log(`Time for 1 rocket/s: ${calculate(1)}`);
console.log(`Time for 2 rocket/s: ${calculate(2)}`);
console.log(`Time for 0.625 rocket/s: ${calculate(0.625)}`);
Если вы вместо этого разделите numberOfRockets
на rocketSpeed
, то получите правильные ответы.
const calculate2 = rocketSpeed => {
// The amount of damage dealt by rocket.
const attackDamage = 60;
// The amount of hit points of the building.
const buildingHitPoints = 1000;
// The number of rockets required to destroy the building.
const numberOfRockets = Math.ceil(buildingHitPoints / attackDamage);
// The time it takes to destroy the building.
const requiredTime = numberOfRockets / rocketSpeed;
return requiredTime;
}
console.log(`Time for 1 rocket/s: ${calculate2(1)}`);
console.log(`Time for 2 rocket/s: ${calculate2(2)}`);
console.log(`Time for 0.625 rocket/s: ${calculate2(0.625)}`);