-1

//Data
var M = 83 * (10 ^ (-5));
var R = 2077;
var Th = 1087;
var Tk = 372;
var Tr = 667;
var a = 90;
var Vclc = 9.135 * (10 ^ (-6));
var Vcle = 7.733 * (10 ^ (-6));
var Vswe = 6.105 * (10 ^ (-5));
var Vswc = 6.294 * (10 ^ (-5));
var Vk = 5.606 * (10 ^ (-6));
var Vr = 19.308 * (10 ^ (-6));
var Vh = 5.606 * (10 ^ (-6));

var ρ = ((2 * Vclc + 2 * Vk + Vswc) / (2 * Tk)) + ((Vr * Math.log(Th / Tk)) / (Th - Tk)) + ((2 * Vcle + 2 * Vh + Vswe) / (2 * Th));
console.log(ρ);
console.log(ρ < Number.MIN_VALUE);

当我在 CodePen 中运行此代码时,我进入控制台:-1.4626799636897467 和 true,我认为这意味着存在下溢。但是,ρ 的值应该是 k*10^-10 之类的东西,其中 k 在 2000 左右是常数。由于 Javascript 中可以表示的最小正数是 5e-324,比我的值小得多,为什么要我得到一个下溢?如果它不是下溢,我不明白正数的总和如何导致负数......

注意:我使用此处提供的信息来检查下溢:如何在 JavaScript 算术运算中检测数字上溢/下溢?JavaScript MIN_VALUE 属性

4

1 回答 1

2

^是按位异或,而不是取幂。

您可以使用指数符号来输入 10 的文字幂。xxxEyyxxx * 10^yy

//Data
var M = 83e-5;
var R = 2077;
var Th = 1087;
var Tk = 372;
var Tr = 667;
var a = 90;
var Vclc = 9.135e-6;
var Vcle = 7.733e-6;
var Vswe = 6.105e-5;
var Vswc = 6.294e-5;
var Vk = 5.606e-6;
var Vr = 19.308e-6;
var Vh = 5.606e-6;

var ρ = ((2 * Vclc + 2 * Vk + Vswc) / (2 * Tk)) + ((Vr * Math.log(Th / Tk)) / (Th - Tk)) + ((2 * Vcle + 2 * Vh + Vswe) / (2 * Th));
console.log(ρ);
console.log(ρ < Number.MIN_VALUE);

您进入true代码的原因是因为Number.MIN_VALUE是最小的数,但您的结果是负数。如果要测试下溢,则需要检查 的绝对值是否p低于Number.MIN_VALUE

但由于小于此的数字无法用 Javascript 浮点数表示,因此对于除0.

于 2018-04-18T18:26:02.607 回答