Calc — מחשבון מדעי מלא ב-3 מצבים: בסיסי, מדעי וזיכרון. נבנה מאפס ב-Vanilla JS עם expression parser מקורי המבוסס על אלגוריתם Shunting-Yard של Dijkstra — ללא ספריות חיצוניות, ללא eval().
3 מצבים, מקלדת אחת
בסיסי (4×5)
ספרות 0-9, נקודה עשרונית, 4 פעולות (+ − × ÷), אחוז (%), פלוס/מינוס (±), AC, ⌫.
מדעי (5×6)
כל מה שיש בבסיסי + פונקציות מתמטיות:
- טריגונומטריה — sin, cos, tan
- לוגריתמים — ln (טבעי), log (בסיס 10), eˣ
- חזקות — x², xʸ, √
- קבועים — π, e
- ערכים — |x|, 1/x, x! (פקטוריאל עד 170!)
זיכרון (4 משבצות)
M1, M2, M3, M4 — לחץ על משבצת לבחירה, ואז:
- M+ — מוסיף את התוצאה הנוכחית למשבצת
- M− — מחסר
- MR — מחזיר את הערך לחישוב
- MC — מנקה
ה-Parser: Shunting-Yard
האפליקציה ממירה את הביטוי לרישום פולני הפוך (RPN) ואז מעריכה — אותה גישה של מחשבונים מקצועיים:
- Tokenizer — שובר את
12+sin(π/4)×8ל-[12, +, sin, (, π, /, 4, ), ×, 8]. מזהה minus אונרי בהקשר. - Shunting-Yard — מעלה לאופרטורים precedence (
^>×/>+−) ו-associativity (^ימני, השאר שמאלי). מוציא ל-RPN:12 π 4 / sin 8 × +. - RPN evaluator — מחסנית פשוטה שמחשבת את התוצאה.
תוצאה: 18.157, מדויק לפי IEEE 754 עם רנדור חכם של float artifacts (round to 12 decimals).
פיצ'רים נוספים
- Live evaluation — התוצאה מתעדכנת תוך כדי הקלדה
- Tape history — 50 חישובים אחרונים שמורים ב-IndexedDB. לחץ על שורה כדי להחזיר את התוצאה כקלט חדש.
- Copy result — לחיצה אחת להעתקת התוצאה לקליפבורד
- תמיכה במקלדת מלאה — 0-9, +, −, *, /, (, ), %, Enter (=), Backspace, Esc (AC)
- Vibration feedback — קל על כל מקש, חזק על = ו-AC
- Notation מדעית אוטומטית למספרים גדולים מדי / קטנים מדי
טכנולוגיות
- Shunting-Yard algorithm מקורי — tokenize → infix-to-postfix → RPN evaluate
- JavaScript Number עם rounding ל-12 ספרות לטיפול ב-float precision (
0.1+0.2 → 0.3נקי) - IndexedDB — tape (autoIncrement keys, sorted DESC) + memory slots
- Vibration API — feedback פר-מקש
- Clipboard API — העתקה
- Service Worker — cache-first + revalidate, אופליין מלא
- PWA installable עם 3 גדלי איקונים
עיצוב
פלטה mauve + warm-cream + butter-yellow — אסתטיקה premium מסוג luxury watch / מחשבון מדעי קלאסי. נבדלת מ-violet (Focus), fuchsia (QR), plum (Flash). רקע #1a0d18 עמוק · mauve #a06ca6 · cream #fef9c3 · אופרטורים בזהב #fcd34d · equals במאוב bright #c084fc.
טיפוגרפיה — Heebo + IBM Plex Mono ל-display ולמספרים (300-500 weight, tabular-nums) + Frank Ruhl Libre לכותרות. Glassmorphic display עם backdrop-filter blur+saturate, layered gradient borders, button shadows עם depth 3D.