From 8b5ac36284d73b70036dd9a74742ef8fcdd23a80 Mon Sep 17 00:00:00 2001 From: Tanner Collin Date: Sat, 14 Mar 2026 13:30:51 -0600 Subject: [PATCH] feat: Add angle mode toggle and apply to trig functions Co-authored-by: aider (gemini/gemini-2.5-pro) --- calculator/calculator.app.js | 55 +++++++++++++++++++++++++++++------- 1 file changed, 45 insertions(+), 10 deletions(-) diff --git a/calculator/calculator.app.js b/calculator/calculator.app.js index b49f8c8..6f18bb0 100644 --- a/calculator/calculator.app.js +++ b/calculator/calculator.app.js @@ -64,10 +64,11 @@ var scientificOperators = { 'sin': {grid: [0, 0], val: 'sin'}, 'cos': {grid: [1, 0], val: 'cos'}, 'tan': {grid: [0, 1], val: 'tan'}, - 'log': {grid: [1, 1], val: 'log'}, - 'tenpow': {grid: [0, 2], val: '10^x'}, - 'ln': {grid: [1, 2], val: 'ln'}, - 'epow': {grid: [0, 3], val: 'e^x'}, + 'angleMode': {grid: [1, 1], val: 'rad'}, + 'log': {grid: [0, 2], val: 'log'}, + 'tenpow': {grid: [1, 2], val: '10^x'}, + 'ln': {grid: [0, 3], val: 'ln'}, + 'epow': {grid: [1, 3], val: 'e^x'}, }; var specialsGrid = [2, 2]; @@ -85,6 +86,7 @@ var operator = null; var results = null; var isDecimal = false; var hasPressedEquals = false; +var angleMode = 'rad'; function prepareScreen(screen, grid, defaultColor) { for (var k in screen) { @@ -360,30 +362,54 @@ function buttonPress(val) { break; case 'sin': if (results != null) { - results = Math.sin(results); + let angle = results; + if (angleMode === 'deg') { + angle = angle * Math.PI / 180; + } + results = Math.sin(angle); displayOutput(results); } else if (currNumber != null) { - currNumber = Math.sin(currNumber); + let angle = currNumber; + if (angleMode === 'deg') { + angle = angle * Math.PI / 180; + } + currNumber = Math.sin(angle); displayOutput(currNumber); } hasPressedNumber = false; break; case 'cos': if (results != null) { - results = Math.cos(results); + let angle = results; + if (angleMode === 'deg') { + angle = angle * Math.PI / 180; + } + results = Math.cos(angle); displayOutput(results); } else if (currNumber != null) { - currNumber = Math.cos(currNumber); + let angle = currNumber; + if (angleMode === 'deg') { + angle = angle * Math.PI / 180; + } + currNumber = Math.cos(angle); displayOutput(currNumber); } hasPressedNumber = false; break; case 'tan': if (results != null) { - results = Math.tan(results); + let angle = results; + if (angleMode === 'deg') { + angle = angle * Math.PI / 180; + } + results = Math.tan(angle); displayOutput(results); } else if (currNumber != null) { - currNumber = Math.tan(currNumber); + let angle = currNumber; + if (angleMode === 'deg') { + angle = angle * Math.PI / 180; + } + currNumber = Math.tan(angle); displayOutput(currNumber); } hasPressedNumber = false; @@ -428,6 +454,15 @@ function buttonPress(val) { } hasPressedNumber = false; break; + case 'angleMode': + if (angleMode === 'rad') { + angleMode = 'deg'; + } else { + angleMode = 'rad'; + } + scientificOperators.angleMode.val = angleMode; + drawKey('angleMode', scientificOperators.angleMode); + break; case 'i': if (results != null) { results = divide(1, results);