2 पॉइंट द्वारा GN⁺ 2026-04-19 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • अलग-अलग interval के union को इनपुट के रूप में लेकर चार बुनियादी arithmetic operations, function calls, और exponentiation तक करता है, और interval union arithmetic को सीधे ब्राउज़र में कैलकुलेट किया जा सकता है
  • परिणाम interval इनपुट union से चुनी गई मानों पर वही expression वास्तविक संख्याओं पर गणना करने पर मिलने वाले मान को ज़रूर शामिल करता है, और 0 को शामिल करने वाले interval से division भी अलग union के रूप में संभाला जा सकता है
  • 1 / [-2, 1] पर [-∞, -0.5] U [1, +∞] और tan([pi/3, 2*pi/3]) पर [-∞, -1.732] U [1.732, +∞] जैसा परिणाम मिलता है, यानी discontinuous interval results और infinite boundaries की अभिव्यक्ति समर्थित है
  • [a, b], [a, b] U [c, d], nested interval syntax, lo, hi, hull, log10, cos, min, max जैसी विभिन्न notation और functions समर्थित हैं
  • full precision mode में IEEE 754 double precision आधारित outward rounding के साथ वास्तविक मान को घेरने वाला interval लौटता है, और 0.1 + 0.2 को [0.29999999999999993, 0.3000000000000001] के रूप में दिखाना इसकी खासियत है

अवलोकन

  • यह अलग-अलग interval के union पर गणना करने वाला कैलकुलेटर है, और सामान्य वास्तविक संख्याओं के साथ-साथ interval union arithmetic का implementation भी सपोर्ट करता है
    • interval [a, b] का अर्थ a से b तक की सभी संख्याएँ है, और [a, b] U [c, d] एक-दूसरे से अलग interval के union को दर्शाता है
    • यह सामान्य interval arithmetic का विस्तारित रूप है, और 0 को शामिल करने वाले interval से division भी closure property बनाए रखते हुए कैलकुलेट किया जा सकता है
  • inclusion property की गारंटी
    • हर इनपुट union से मनचाही एक-एक वास्तविक संख्या चुनकर उसी expression को वास्तविक संख्याओं पर कैलकुलेट किया जाए, तो उसका परिणाम आउटपुट union में ज़रूर शामिल होगा
  • uncertainty को व्यक्त किया जा सकता है
    • 50 * (10 + [-1, 1]) का परिणाम [450, 550] उदाहरण के रूप में दिया गया है
  • जटिल interval expressions की गणना समर्थित
    • U operator का उपयोग करके ( [5, 10] U [15, 16] ) / [10, 100] जैसी expressions इनपुट की जा सकती हैं
    • परिणाम [0.05, 1.6] उदाहरण के रूप में दिया गया है
  • operation का परिणाम अलग union हो सकता है
    • 1 / [-2, 1] का परिणाम [-∞, -0.5] U [1, +∞]
    • tan([pi/3, 2*pi/3]) का परिणाम [-∞, -1.732] U [1.732, +∞]
  • full precision mode में इसे सामान्य calculator की तरह इस्तेमाल किया जा सकता है, लेकिन साथ ही floating-point precision problem सहित वास्तविक मान को घेरने वाला interval परिणाम भी देता है
    • 0.1 + 0.2 का परिणाम [0.29999999999999993, 0.3000000000000001] उदाहरण के रूप में दिखाया गया है

सिंटैक्स

  • basic notation समर्थित
    • interval notation [a, b] समर्थित है
    • उदाहरण [0.5, 0.6]
  • union notation समर्थित
    • [a, b] U [c, d] रूप समर्थित है
    • उदाहरण [0, 1] U [5, 6]
  • चार बुनियादी arithmetic operations और exponentiation समर्थित
    • addition A + B उदाहरण ➤ [90, 100] + [-2, 2] परिणाम [88, 102]
    • subtraction A - B उदाहरण ➤ [14, 16] - [8, 12] परिणाम [2, 8]
    • multiplication A * B उदाहरण ➤ [-5, 10] * [2, 4] परिणाम [-20, 40]
    • division A / B उदाहरण ➤ [2, 4] / [-1, 2] परिणाम [-∞, -2] U [1, +∞]
    • exponentiation A ^ B उदाहरण ➤ [2, 3] ^ [-2, 3] परिणाम [0.1111, 27]
  • functions और constants समर्थित
    • function call function(...) रूप समर्थित है
    • log10([1, 10000]) का परिणाम [0, 4]
    • constant names इनपुट समर्थित है
    • pi का परिणाम [3.1415926535897927, 3.1415926535897936]
  • numbers और intervals का मिश्रित इनपुट संभव
    • [1, 2] की तरह square bracket syntax से interval इनपुट किया जा सकता है
    • 3.14 जैसी संख्या को width 0 वाले संकीर्ण interval [3.14, 3.14] के रूप में समझा जाता है
    • full precision mode में इससे जुड़ा व्यवहार थोड़ा अलग है
    • 1.55 + [-0.002, 0.002] का परिणाम [1.548, 1.552]
  • nested interval syntax समर्थित
    • [0, [0, 100]] इनपुट किया जा सकता है और परिणाम [0, 100] होता है
    • interval boundaries को परिभाषित करने वाली अंदर की संख्याएँ भी सभी interval के रूप में समझी जाती हैं
    • nested interval में boundary की जगह आने वाले interval के लिए उसका upper bound लिया जाता है
    • इस डिज़ाइन से boundary पर भी arithmetic लागू की जा सकती है
    • [0, cos(2*pi)] का परिणाम [0, 1]

समर्थित functions

  • constants समर्थित
    • inf, , pi, e समर्थित हैं
    • [-inf, 0] * [-inf, 0] का परिणाम [0, +∞]
  • boundary extraction functions समर्थित
    • lo(A) lower bound लौटाता है
      • lo([1, 2]) का परिणाम [1, 1]
    • hi(A) upper bound लौटाता है
      • hi([1, 2]) का परिणाम [2, 2]
  • interval hull calculation समर्थित
    • hull(A) union को एक interval में घेरता है
    • hull([1, 2] U [99, 100]) का परिणाम [1, 100]
  • basic math functions समर्थित
    • abs(A) उदाहरण abs([-10, 5]) परिणाम [0, 10]
    • sqrt(A) उदाहरण sqrt([9, 49]) परिणाम [3, 7]
    • sqinv(A) उदाहरण sqinv([4, 64]) परिणाम [-8, -2] U [2, 8]
  • logarithmic और exponential functions समर्थित
    • log(A) उदाहरण log([0, 1]) परिणाम [-∞, 0]
    • log2(A) उदाहरण log2([64, 1024]) परिणाम [6, 10]
    • log10(A) उदाहरण log10([0.0001, 1]) परिणाम [-4, 0]
    • exp(A) उदाहरण exp([-∞, 0] U [1, 2]) परिणाम [0, 1] U [2.718, 7.389]
  • trigonometric और inverse trigonometric functions समर्थित
    • cos(A) उदाहरण cos([pi/3, pi]) परिणाम [-1, 0.5]
    • sin(A) उदाहरण sin([pi/6, 5*pi/6]) परिणाम [0.5, 1]
    • tan(A) उदाहरण tan([pi/3, 2*pi/3]) परिणाम [-∞, -1.732] U [1.732, +∞]
    • acos(A) उदाहरण acos([-1/2, 1/2]) परिणाम [1.047, 2.094]
    • asin(A) उदाहरण asin([0, 1]) परिणाम [0, 1.571]
    • atan(A) उदाहरण atan([-10, 2]) परिणाम [-1.471, 1.107]
  • minimum और maximum functions समर्थित
    • min(A, B) उदाहरण min([1, 2], [0, 6]) परिणाम [0, 2]
    • max(A, B) उदाहरण max([0, 10], [5, 6]) परिणाम [5, 10]

full precision mode

  • IEEE 754 double precision floating-point पर outward rounding का implementation
    • JavaScript के number type का उपयोग
    • उसी expression को वास्तविक संख्याओं और infinite precision के साथ कैलकुलेट करने पर जो वास्तविक मान मिलता है, परिणाम interval उसे ज़रूर शामिल करता है
  • 0.1 + 0.2 उदाहरण शामिल
    • 0.3 को double precision floating-point में ठीक-ठीक represent नहीं किया जा सकता
    • interval arithmetic 0.3 को शामिल करने वाला interval कैलकुलेट करता है
  • full precision mode सक्षम होने पर व्यवहार
    • उपयोगकर्ता द्वारा दर्ज संख्या को उस दर्ज की गई दशमलव अभिव्यक्ति के सबसे निकट IEEE 754 मान को शामिल करते हुए, लेकिन जिसकी दोनों boundaries उस मान के बराबर न हों, ऐसे सबसे छोटे interval के रूप में समझा जाता है
    • output numbers उपलब्ध सभी decimal digits के साथ दिखाए जाते हैं
    • Number.toString() का उपयोग
  • full precision mode अक्षम होने पर व्यवहार
    • उपयोगकर्ता द्वारा दर्ज संख्या को दर्ज की गई दशमलव अभिव्यक्ति के सबसे निकट IEEE 754 मान के बराबर दोनों boundaries वाले degenerate interval के रूप में समझा जाता है
    • output numbers अधिकतम 4 decimal places तक दिखाए जाते हैं
    • Number.toPrecision() का उपयोग

बग

  • यह उल्लेख है कि calculator में अभी भी bugs बचे हो सकते हैं
  • समस्या रिपोर्ट करने के लिए GitHub issue link दिया गया है

ओपन सोर्स

  • Interval Calculator और इसका calculator engine not-so-float दोनों ओपन सोर्स के रूप में जारी किए गए हैं
  • GitHub Sponsors support link शामिल है

आगे का काम

  • full precision mode को दो control items में बाँटने की योजना
    • input interpretation
    • display precision
  • ans variable जोड़ने की योजना
    • पिछले input के परिणाम को रखने वाला variable
  • intersection operator या function जोड़ने की योजना
  • U operator की precedence को अधिक सहज बनाने की योजना
  • empty union input समर्थन जोड़ने की योजना

1 टिप्पणियां

 
GN⁺ 2026-04-19
Hacker News की राय
  • लेखक के तौर पर कहूँ तो, outward rounding precision issues से निपटने के लिए interval arithmetic में सबसे मशहूर हिस्सा है, लेकिन मुझे लगता है कि सिर्फ उसी पर ध्यान जाना थोड़ा अफ़सोस की बात है। research papers में जिस containment property की बात होती है, वह हर scale पर काम करती है, इसलिए 50 * (10 + [-1, 1]) = [450, 550] जैसा परिणाम स्वाभाविक लगता है। इसके ऊपर union layer जोड़ दें तो square function के true inverse जैसी चीज़ें भी संभाली जा सकती हैं, और sqrt की जगह sqinv(64) चलाकर देखें तो बात समझ आती है। असल में यह interval calculator मेरे दूसरे प्रोजेक्ट backwards updating spreadsheet के लिए बना रहे interval union arithmetic implementation को परखने के लिए बनाया गया था। implementation है not-so-float, और जुड़े हुए प्रोजेक्ट हैं bidicalc और HN discussion
    • यह जानने की जिज्ञासा है कि आपने जो arithmetic implement किया है, वह IEEE 1788 standard से कैसे अलग है। आपने जिन दो papers के लिंक दिए हैं, उनका उस standard से क्या संबंध है, यह भी जानना चाहूँगा। लेख में जिन समस्याओं का ज़िक्र है, क्या उन्हें हल करने के लिए पूरी तरह नए सिरे से शुरू करना पड़ा, या IEEE standard के ऊपर build करना संभव था?
    • यह सच में बहुत बढ़िया है और मैं इसे और चलाकर देखने वाला हूँ। दो बातें खास तौर पर जाननी हैं। पहली, multivalued functions जोड़ना कितना कठिन होगा? उदाहरण के लिए, asin(1) पर Mathematica के बिना भी पूरा set [pi/2, pi/2] + n[2pi, 2pi] मिल जाए तो बहुत अच्छा होगा। दूसरी, user input numbers को parse करने वाली explanation line मुझे थोड़ी confusing लगी। मेरी समझ से input value को शामिल करने वाले सबसे छोटे interval की output boundary values वही दो सबसे नज़दीकी IEEE 754 numbers होने चाहिए जो input value को घेरते हों, लेकिन मौजूदा वाक्य पढ़कर बात IEEE754(input)+[-epsilon, epsilon] जैसी लगती है, जिससे अर्थ अलग महसूस होता है
  • यह सच में अच्छा है। Matt Keeter का implicit surfaces पर काम और interval math का उपयोग करके optimization करना भी काफ़ी दिलचस्प है। इस talk में उससे जुड़ी बातें देखी जा सकती हैं
  • मेरे पास भी interval arithmetic से बना एक graphing calculator है, इसलिए शायद यह दिलचस्प लगे। इसे सीधे इस्तेमाल करने के लिए formulagraph है, और यह कैसे काम करता है व संबंधित code की व्याख्या इस लेख में रखी है
    • पहली नज़र में यह GrafEq जैसा लगा। पुराने GrafEq की याद आ गई
  • मुझे भी यह मज़ेदार लगा, इसलिए मैंने Raku में एक साधारण Math::Interval library लिखकर देखी थी। यह raku-Math-Interval है, जो Raku के built-in Junction और Range classes के आधार पर किया गया एक प्रयोग था, और यह काफ़ी दिलचस्प अनुभव रहा
  • बहुत अच्छा है, और इसे साझा करने के लिए धन्यवाद। मेरा मानना है कि interval में upper/lower bounds की inclusivity दिखे तो और अच्छा होगा। जिस notation का मैं आदी हूँ, उसमें value शामिल न होने पर बाहर की ओर खुलने वाले brackets लिखे जाते हैं, और infinity पर भी यही हमेशा लागू होता है। जैसे ]-∞, -1] U [0.5, +∞[ इस तरह, और बीच का excluded interval ]-1, 0.5[ होगा। मेरी समझ से min और max भी शायद इसी तरह interpret किए जा रहे हैं। और अगर result area के expression पर click या tap करने से वह input box में copy हो जाए, तो ऐसा UI idea भी काफ़ी सुविधाजनक होगा
    • लिंक किए गए paper को पढ़ने पर दिखा कि वहाँ सिर्फ closed intervals की चर्चा थी। interval union को बंद और एक-दूसरे से अलग intervals के set के रूप में परिभाषित किया गया था, और सिर्फ दोनों छोर के extreme intervals की boundaries ही ±∞ हो सकती हैं
    • ऐसी notation को support करना संभव है, लेकिन इससे code काफ़ी ज़्यादा जटिल हो जाता है। इसलिए बहुत शुरुआती चरण में ही मैंने तय कर लिया था कि इसे support नहीं करूँगा। फिर भी, यह एक शानदार अतिरिक्त feature हो सकता है
    • मुझे भी यह हिस्सा थोड़ा confusing लगा। जिस standard notation को मैं जानता था, वह round brackets वाली थी, हालाँकि शायद ASCII environment में वह उतनी अच्छी तरह fit नहीं बैठती
  • बहुत शानदार। मैंने हर operation को पूरी तरह नहीं समझा, लेकिन जितना समझा, उससे ही काफ़ी प्रभावित हुआ। लगता है कि काश पढ़ाई में intervals पर arithmetic का परिचय थोड़ा पहले मिला होता। basic statistics के confidence intervals या quadratic equations के ± जैसे रूपों में वैसी ही अवधारणाएँ पहले से आती हैं, लेकिन उन परिणामों को एक data object की तरह आगे calculate नहीं किया जाता; हर बार ± के दोनों values को अलग-अलग संभालना पड़ता है, और यह हमेशा थोड़ा खटकता था। बेशक, शिक्षक जल्दी से applications पर लौटना चाहते हैं, इसलिए गहराई में न जाने की वजह समझ में आती है। फिर भी, कम से कम इतना संकेत तो मिलना चाहिए था कि ऐसे objects पर भी सामान्य arithmetic संभव है। आपने जो यहाँ दिखाया है, वह उससे काफ़ी आगे की चीज़ है, लेकिन intervals को अपने खुद के behavior वाले data की तरह देखने का नज़रिया सही बैठता है, इसका एक तरह का validation लगता है
  • मुझे लगता है कि अगर Clojure में time interval library tick का इस्तेमाल पहली बार करते समय interval arithmetic के बारे में पता होता, तो अच्छा रहता। इस library में Allen's Interval Algebra का implementation भी है, और इसने practical calculations के लिए उपयोगी discrete interval sets की अवधारणा भी अपनाई है। उदाहरण के लिए, किसी साल के भीतर आने वाले छुट्टी के interval sets निकालने जैसे HR कामों में यह अच्छी तरह fit बैठता है। मैं Allen के काम तक ही सीमित था, और ऐसे sets के फायदे मुझे संयोग से समझ आए। code है juxt/tick
  • इस tool की उपयोगिता साफ़ दिखती है, लेकिन निजी तौर पर मुझे लगता है कि probabilistic calculator ज़्यादा उपयोगी होगा। उदाहरण के लिए 1 / [-1, 2] जैसा परिणाम यह नहीं बताता कि कौन-सी values कितनी plausible हैं, और input को uniform मान भी लें तो output स्पष्ट रूप से uniform distribution नहीं लगेगी
  • मैंने भी हाल में कुछ ऐसा implement किया था, लेकिन मेरा नज़रिया set membership की ओर था। इसलिए interval membership का पूरा Boolean analysis करने के लिए complement operation चाहिए था। यहाँ के intervals सब closed sets हैं, इसलिए complement open intervals बनता है, लेकिन मेरे उपयोग में endpoint inclusivity महत्वपूर्ण नहीं थी, इसलिए open और closed intervals में मैंने जानबूझकर अंतर नहीं किया। ऊपर से, inexact arithmetic में कोई set open है या closed, यह खुद भी शायद ठीक से परिभाषित न हो
  • logic को union of intervals तक बढ़ाना प्रभावशाली लगता है, लेकिन complexity को लेकर जिज्ञासा है। अगर कोई एक operation दो intervals बना सकता है, तो N operations के बाद कुछ मामलों में exponential growth हो सकती है। तब शायद abstract interpretation जैसे सामान्य उपयोगों में, एक तय संख्या के बाद approximation लाए बिना, यह अव्यावहारिक हो जाएगा
    • यह सही बात है, और abstract interpretation में यह समस्या अच्छी तरह जानी-पहचानी है। जैसा आपने कहा, आम तौर पर object size पर cap रखा जाता है, और limit पार होने पर intervals को merge कर दिया जाता है। हालाँकि कम से कम abstract interpretation में, interval से भी ज़्यादा precise domains का इस्तेमाल अक्सर किया जाता है