Неожиданный недостаток

//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 Свойство

1 ответ

Решение

^ побитовый XOR, не возведение в степень.

Вы можете использовать экспоненциальную запись для ввода буквальных степеней 10. xxxEyy является xxx * 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,

Другие вопросы по тегам