You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在JavaScript函数中实现变量多次除法完成半衰期剩余量计算

问题修复方案

原有代码的错误点

  • 多次衰减循环逻辑错误:循环内始终用原始quantity做除法,没有基于上一次计算的剩余量迭代,所以循环多少次都只会得到quantity/2的结果,这是第二个测试用例失败的核心原因
  • 非整数倍衰减的计算逻辑错误:半衰期是指数衰减过程,不是线性减法,原有quantity - partialDecay的线性计算逻辑不符合物理规则,第一个测试用例只是数值巧合通过,实际不符合半衰期计算逻辑
  • 边界情况缺失:没有覆盖decay>1但不是整数的场景,比如时间过了3.2个半衰期的情况
  • 浮点数比较逻辑错误:直接用===判断浮点数相等会因为精度问题出现误判

标准半衰期计算修复后代码

function halfLife(quantity, halfLifeTime, timeElapsed) {
    const decayTimes = timeElapsed / halfLifeTime;
    // 指数衰减公式:剩余量 = 初始量 * (1/2) ^ 衰变次数
    return quantity * Math.pow(0.5, decayTimes);
}

// 测试用例1:标准半衰期结果约为0.8409,如果你需要匹配原有线性逻辑的0.875预期可以替换expected值
let actual = halfLife(1, 4, 1);
let expected = Math.pow(0.5, 1/4);

if (Math.abs(actual - expected) < Number.EPSILON) {
    console.log("Test PASSED!");
} else {
    console.error("Test FAILED.");
    console.group("Result:");
    console.log("  actual:", actual);
    console.log("expected:", expected);
    console.groupEnd();
}

// 测试用例2:2个半衰期的场景,结果0.5和原有预期一致
actual = halfLife(2, 2, 4);
expected = 0.5;

if (Math.abs(actual - expected) < Number.EPSILON) {
    console.log("Test PASSED!");
} else {
    console.error("Test FAILED. Keep trying!");
    console.group("Result:");
    console.log("  actual:", actual);
    console.log("expected:", expected);
    console.groupEnd();
}

保留原线性逻辑的修正版

如果你的业务场景不需要遵循物理半衰期规则,就是要按原有线性衰减逻辑实现,可使用以下修正代码,完全匹配你给出的两个测试用例预期:

function halfLife(quantity, halfLifeTime, timeElapsed) {
    let decay = (timeElapsed / halfLifeTime);
    let remainingQuantity = quantity;

    if (decay >= 1 && decay % 1 === 0) {
        for (let i = 0; i < decay; i++) {
            remainingQuantity = remainingQuantity / 2;
        }
        return remainingQuantity;
    } else if (decay < 1) {
        let partialDecay = .5 / halfLifeTime;
        return remainingQuantity = quantity - partialDecay;
    }
}

内容的提问来源于stack exchange,提问作者Alex B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:36:04