如何获取变量pesoil除法赋值后的值?该写法是否破坏原变量?
问题解答
- 这段代码可以实现获取转换为mm month^-1之前的数值:
pesoil /= (beta + PSY * exp_h * (1.0 + r_ss / r_as))是复合赋值操作,会将pesoil更新为除以该因子后的结果(即单位为W m^-2的数值),同时这个表达式的返回值就是更新后的pesoil,因此epotential_W会正确存储这个转成mm month^-1之前的数值。 - 会破坏pesoil原本的初始值:因为
/=是原地修改变量的运算符,执行后pesoil不再保留最初beta * rnsoil + CPAIR * RHOAIR * exp_h * vpdo / r_as计算出的原始值。如果后续仅按原有逻辑执行pesoil *= (etimes * ndays[dm]) / LAMBDA来得到mm month^-1的结果,最终pesoil的结果和原代码一致;但如果之后还需要用到最初的pesoil值,这种写法会导致数据丢失。
如果不想破坏原始pesoil值,建议改成:
epotential_W = pesoil / (beta + PSY * exp_h * (1.0 + r_ss / r_as)); // 仅计算赋值,不修改pesoil pesoil = epotential_W; // 若需保留原逻辑中pesoil的更新,再单独赋值
内容的提问来源于stack exchange,提问作者code_error
相关产品推荐
相关产品推荐

