Home > Back-end >  Why is the output NaN?
Why is the output NaN?

Time:01-12

I'm learning Javascript, when I want to calculate using a formula the resulting data is NaN.

I want the resulting data to be

ar = [37, 36.63, 35.68, 38.81, 37.67, 37.64, 37.64, 39.74, 40.67, 40.61];

ma = [0.00, 0.63, 3.32, 0.81, 0.33, 0.36, 2.36, 1.26, 0.33, 1.61];

Is there something wrong with my code that is making me get this answer?

var suhu = [37, 36, 39, 38, 38, 38, 40, 41, 41, 39];

var ar = []
var ma = []
var temp = 0

// AR
for (var i = 1; i < suhu.length; i  ) {
  ar[0] = suhu[0]
  temp = 0.99 * suhu[i - 1]   0.06 * ma[i - 1]
  ar.push(temp)
}

// MA
for (var j = 0; j < suhu.length; j  ) {
  suhu[j] = Math.abs(suhu[j] - ar[j]);
  ma.push(suhu[j])
}

console.log(ar);
// 37, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN
console.log(ma);
// 0, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN, NaN

CodePudding user response:

The problem is that the calculation of ar[i] depends on ma[i-1] and ma[i] depends on ar[i] so you need to calculate these in the right order in a single loop.

const suhu = [37, 36, 39, 38, 38, 38, 40, 41, 41, 39];
const ar = [];
const ma = [];

// Calucate AR and MA together
ar[0] = suhu[0]
for (var i = 0; i < suhu.length; i  ) {

  if (i > 0)
    ar.push(0.99 * suhu[i - 1]   0.06 * ma[i - 1])

  ma.push(Math.abs(suhu[i] - ar[i]));
}

console.log(ar);
// [37, 36.63, 35.6778, 38.809332, 37.66855992, 37.639886404799995,
//  37.641606815711995, 39.74150359105728, 40.66550978453656, 40.6100694129278]
console.log(ma);
// [0, 0.6300000000000026, 3.3222000000000023, 0.8093319999999977, 0.33144008000000014,
//  0.36011359520000497, 2.358393184288005, 1.2584964089427189, 0.3344902154634397, 1.6100694129277997]
.as-console-wrapper{top:0;max-height:100%!important}

The results are accurate to more than 2 decimal places and you will need that to calculate the next values correctly. You can change the precision once all the values have been calculated though.

CodePudding user response:

So what should I do about it?

Calculating the values in ar and ma seems so dependent on each other. To calculate ar[i] you need ma[i-1] and for ma[i] you need ar[i]. This should be a single loop. You can't first compute one array and then the other.

var suhu = [37, 36, 39, 38, 38, 38, 40, 41, 41, 39];
var ar = [suhu[0]];
var ma = [0];

for (let i = 1; i < suhu.length;   i) {
  ar[i] = 0.99 * suhu[i - 1]   0.06 * ma[i - 1];
  ma[i] = Math.abs(suhu[i] - ar[i]);
}

console.log(ar);
console.log(ma);
.as-console-wrapper{top:0;max-height:100%!important}

CodePudding user response:

you havent initialized the ma[] at start and used it for initializing ar[] so it producing Nan value.

CodePudding user response:

In JavaScript, NaN stands for Not a Number. It represents a value which is not a valid number. It can be used to check whether a number entered is a valid number or not a number.

From https://www.geeksforgeeks.org/javascript-number-nan-property/#:~:text=In JavaScript, NaN stands for,number or not a number.

  •  Tags:  
  • Related