अलग-अलग interval के union पर गणना करने वाला कैलकुलेटर
(victorpoughon.github.io)- अलग-अलग 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 बनाए रखते हुए कैलकुलेट किया जा सकता है
- interval
- inclusion property की गारंटी
- हर इनपुट union से मनचाही एक-एक वास्तविक संख्या चुनकर उसी expression को वास्तविक संख्याओं पर कैलकुलेट किया जाए, तो उसका परिणाम आउटपुट union में ज़रूर शामिल होगा
- uncertainty को व्यक्त किया जा सकता है
50 * (10 + [-1, 1])का परिणाम[450, 550]उदाहरण के रूप में दिया गया है
- जटिल interval expressions की गणना समर्थित
Uoperator का उपयोग करके( [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]
- interval notation
- 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]
- addition
- functions और constants समर्थित
- function call
function(...)रूप समर्थित है log10([1, 10000])का परिणाम[0, 4]- constant names इनपुट समर्थित है
piका परिणाम[3.1415926535897927, 3.1415926535897936]
- function call
- 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 के
numbertype का उपयोग - उसी expression को वास्तविक संख्याओं और infinite precision के साथ कैलकुलेट करने पर जो वास्तविक मान मिलता है, परिणाम interval उसे ज़रूर शामिल करता है
- JavaScript के
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
ansvariable जोड़ने की योजना- पिछले input के परिणाम को रखने वाला variable
- intersection operator या function जोड़ने की योजना
Uoperator की precedence को अधिक सहज बनाने की योजना- empty union input समर्थन जोड़ने की योजना
1 टिप्पणियां
Hacker News की राय
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 discussionasin(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]जैसी लगती है, जिससे अर्थ अलग महसूस होता है]-∞, -1] U [0.5, +∞[इस तरह, और बीच का excluded interval]-1, 0.5[होगा। मेरी समझ से min और max भी शायद इसी तरह interpret किए जा रहे हैं। और अगर result area के expression पर click या tap करने से वह input box में copy हो जाए, तो ऐसा UI idea भी काफ़ी सुविधाजनक होगा1 / [-1, 2]जैसा परिणाम यह नहीं बताता कि कौन-सी values कितनी plausible हैं, और input को uniform मान भी लें तो output स्पष्ट रूप से uniform distribution नहीं लगेगी