StackGenVis: Alignment of Data, Algorithms, and Models for Stacking Ensemble Learning Using Performance Metrics
https://doi.org/10.1109/TVCG.2020.3030352
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.4 KiB
60 lines
1.4 KiB
'use strict'
|
|
|
|
var isRat = require('./is-rat')
|
|
var isBN = require('./lib/is-bn')
|
|
var num2bn = require('./lib/num-to-bn')
|
|
var str2bn = require('./lib/str-to-bn')
|
|
var rationalize = require('./lib/rationalize')
|
|
var div = require('./div')
|
|
|
|
module.exports = makeRational
|
|
|
|
function makeRational(numer, denom) {
|
|
if(isRat(numer)) {
|
|
if(denom) {
|
|
return div(numer, makeRational(denom))
|
|
}
|
|
return [numer[0].clone(), numer[1].clone()]
|
|
}
|
|
var shift = 0
|
|
var a, b
|
|
if(isBN(numer)) {
|
|
a = numer.clone()
|
|
} else if(typeof numer === 'string') {
|
|
a = str2bn(numer)
|
|
} else if(numer === 0) {
|
|
return [num2bn(0), num2bn(1)]
|
|
} else if(numer === Math.floor(numer)) {
|
|
a = num2bn(numer)
|
|
} else {
|
|
while(numer !== Math.floor(numer)) {
|
|
numer = numer * Math.pow(2, 256)
|
|
shift -= 256
|
|
}
|
|
a = num2bn(numer)
|
|
}
|
|
if(isRat(denom)) {
|
|
a.mul(denom[1])
|
|
b = denom[0].clone()
|
|
} else if(isBN(denom)) {
|
|
b = denom.clone()
|
|
} else if(typeof denom === 'string') {
|
|
b = str2bn(denom)
|
|
} else if(!denom) {
|
|
b = num2bn(1)
|
|
} else if(denom === Math.floor(denom)) {
|
|
b = num2bn(denom)
|
|
} else {
|
|
while(denom !== Math.floor(denom)) {
|
|
denom = denom * Math.pow(2, 256)
|
|
shift += 256
|
|
}
|
|
b = num2bn(denom)
|
|
}
|
|
if(shift > 0) {
|
|
a = a.ushln(shift)
|
|
} else if(shift < 0) {
|
|
b = b.ushln(-shift)
|
|
}
|
|
return rationalize(a, b)
|
|
}
|
|
|