After tests I ran on Friday, I wanted to see how Javascript does with floating point numbers? JS only supports 64 bit floating-point numbers, but there must be special code in their to make integers look like integers ... unless their isn't.

When I went to update my code to support numbers with fractions, my first thought was to flag whether a decimal point had been seen and then keep track of the value by which to divide, multiplying by ten for each fractional digit. I quickly realized I was sinking into the mire of coding stupidity; JS must have a function to convert strings into integers or floats, and indeed it has parseInt() and

**parseFloat(). But in my research I discovered ( or re-discovered ) that there's no need for the conversion. Like Perl, JS allows arithmetic on the string representation of numbers:**

1 + 2 ⇛ 3

"1" + "2"⇛ 3

This made me think about how I would parse the file in Perl, using split(). I knew JS had map(), so quite likely it would have split() as well. And it does! So all that manual processing went in the trash, and I simplified readMatrix.js to

```
exports.readMatrix = function (err, data) {
if (err) {
throw err;
}
var rows = data.split(/ *\n/)
.filter(function(val) {
return val.length > 0;
});
var matrix = [], i, len;
for ( 1 = 0, len = rows.length; i<len; i++ ) {
matrix[i] = rows[i].split(/ +/);
}
return matrix;
};
```

I think I had the two chunks merged, in an online TryIt editor I was experimenting with,but this is compact enough for the moment.{Correction - Although the original JS used only floats, including for integer values, Googles V* JS engine, the one used in node.js, has separate 32 bit integers.}

Calculating average operations per second shows small matrixes have performance limited by other overhead, but larger matrices are pumping along at 7.8 million multiplications per second.

## No comments:

Post a Comment