Sharp Calculators
function calculateSharpFunction() {
var x = parseFloat(document.getElementById('primaryValue').value);
var y = parseFloat(document.getElementById('secondaryValue').value);
var op = document.getElementById('operationType').value;
var result = 0;
var display = document.getElementById('sharpCalcOutput');
var container = document.getElementById('sharpResultDisplay');
if (isNaN(x) && op !== 'fact') {
display.innerHTML = "ERROR: No Input";
container.style.display = "block";
return;
}
switch(op) {
case 'pow':
if (isNaN(y)) {
result = "ERROR: Need y";
} else {
result = Math.pow(x, y);
}
break;
case 'sqrt':
if (x < 0) {
result = "ERROR: Negative";
} else {
result = Math.sqrt(x);
}
break;
case 'cbrt':
result = Math.cbrt(x);
break;
case 'sin':
result = Math.sin(x * Math.PI / 180);
break;
case 'cos':
result = Math.cos(x * Math.PI / 180);
break;
case 'tan':
result = Math.tan(x * Math.PI / 180);
break;
case 'log':
if (x <= 0) {
result = "ERROR: Domain";
} else {
result = Math.log10(x);
}
break;
case 'ln':
if (x <= 0) {
result = "ERROR: Domain";
} else {
result = Math.log(x);
}
break;
case 'fact':
if (x 170) {
result = "ERROR: Range";
} else {
var f = 1;
for (var i = 1; i <= Math.floor(x); i++) f *= i;
result = f;
}
break;
case 'recip':
if (x === 0) {
result = "ERROR: Div/0";
} else {
result = 1 / x;
}
break;
default:
result = 0;
}
if (typeof result === 'number') {
if (!isFinite(result)) {
display.innerHTML = "ERROR: Infinite";
} else {
// Mimic scientific calculator precision
display.innerHTML = Number(result.toPrecision(10)).toString();
}
} else {
display.innerHTML = result;
}
container.style.display = "block";
}