Ayrık aralık kümeleri üzerinde hesap yapan hesap makinesi
(victorpoughon.github.io)- Girdi olarak ayrık aralıkların birleşimini alıp dört işlem, fonksiyon çağrıları ve üs alma dahil işlemleri gerçekleştiriyor; interval union arithmetic hesaplamalarını doğrudan tarayıcıda yapabiliyor
- Sonuç aralıkları, girdi birleşimlerinden seçilen değerlerle aynı ifade reel sayılar üzerinde hesaplandığında ortaya çıkacak değeri mutlaka içeriyor; ayrıca 0 içeren bir aralığa bölme işlemi de ayrık birleşim biçiminde ele alınabiliyor
1 / [-2, 1]için[-∞, -0.5] U [1, +∞],tan([pi/3, 2*pi/3])için[-∞, -1.732] U [1.732, +∞]üretiyor; yani süreksiz aralık sonuçları ve sonsuz sınırlar gösterilebiliyor[a, b],[a, b] U [c, d], iç içe aralık sözdizimi,lo,hi,hull,log10,cos,min,maxgibi çeşitli gösterim ve fonksiyonları destekliyor- Tam hassasiyet modunda IEEE 754 çift duyarlıklı sayı temelli dışa doğru yuvarlama ile gerçek değeri saran aralıklar döndürüyor;
0.1 + 0.2sonucunu[0.29999999999999993, 0.3000000000000001]olarak göstermesi öne çıkıyor
Genel bakış
- Ayrık aralıkların birleşimi üzerinde hesap yapan bir hesap makinesi; sıradan reel sayılarla birlikte interval union arithmetic uygulamasını da destekliyor
[a, b]aralığı, a ile b arasındaki tüm sayıları ifade eder;[a, b] U [c, d]ise birbirinden ayrı aralıkların birleşimidir- Klasik aralık aritmetiğinin genişletilmiş bir biçimidir ve 0 içeren bir aralığa bölme işlemini de kapalılık özelliğini koruyarak hesaplayabilir
- Kapsama özelliği garantisi
- Girdi birleşimlerinin her birinden keyfi bir reel sayı seçilip aynı ifade reel sayılar üzerinde hesaplandığında, çıkan sonuç mutlaka çıktı birleşiminin içinde yer alır
- Belirsizliği ifade edebilme
50 * (10 + [-1, 1])hesabı için[450, 550]örneği veriliyor
- Karmaşık aralık ifadelerini hesaplama desteği
Uoperatörüyle( [5, 10] U [15, 16] ) / [10, 100]gibi ifadeler girilebiliyor- Sonuç için
[0.05, 1.6]örneği veriliyor
- İşlem sonucu ayrık bir birleşim olabilir
1 / [-2, 1]sonucu[-∞, -0.5] U [1, +∞]tan([pi/3, 2*pi/3])sonucu[-∞, -1.732] U [1.732, +∞]
- Tam hassasiyet modunda, normal bir hesap makinesi gibi kullanılabilirken aynı zamanda kayan nokta hassasiyet sorunlarını da içeren gerçek değeri saran aralık sonuçları sunuyor
0.1 + 0.2sonucu için[0.29999999999999993, 0.3000000000000001]örneği veriliyor
Sözdizimi
- Temel gösterim desteği
[a, b]aralık gösterimi destekleniyor- Örnek:
[0.5, 0.6]
- Birleşim gösterimi desteği
[a, b] U [c, d]biçimi destekleniyor- Örnek:
[0, 1] U [5, 6]
- Dört işlem ve üs alma desteği
- Toplama
A + Börneği➤ [90, 100] + [-2, 2]sonucu[88, 102] - Çıkarma
A - Börneği➤ [14, 16] - [8, 12]sonucu[2, 8] - Çarpma
A * Börneği➤ [-5, 10] * [2, 4]sonucu[-20, 40] - Bölme
A / Börneği➤ [2, 4] / [-1, 2]sonucu[-∞, -2] U [1, +∞] - Üs alma
A ^ Börneği➤ [2, 3] ^ [-2, 3]sonucu[0.1111, 27]
- Toplama
- Fonksiyon ve sabit desteği
function(...)biçiminde fonksiyon çağrıları destekleniyorlog10([1, 10000])sonucu[0, 4]- Sabit adları girilebiliyor
pisonucu[3.1415926535897927, 3.1415926535897936]
- Sayı ve aralıkları birlikte kullanabilme
[1, 2]gibi köşeli parantez sözdizimiyle aralık girilebiliyor3.14gibi bir sayı, genişliği 0 olan dar bir aralık[3.14, 3.14]olarak yorumlanıyor- Tam hassasiyet modunda bununla ilgili bazı ayrıntılı farklar bulunuyor
1.55 + [-0.002, 0.002]sonucu[1.548, 1.552]
- İç içe aralık sözdizimi desteği
[0, [0, 100]]girişi yapılabiliyor ve sonuç[0, 100]oluyor- Aralık sınırlarını tanımlayan içteki sayılar da aralık olarak yorumlanıyor
- İç içe aralıklarda sınır konumuna gelen aralık için o aralığın üst sınırı alınıyor
- Bu tasarım sayesinde sınırların kendisine de aritmetik uygulanabiliyor
[0, cos(2*pi)]sonucu[0, 1]
Desteklenen fonksiyonlar
- Sabit desteği
inf,∞,pi,edestekleniyor[-inf, 0] * [-inf, 0]sonucu[0, +∞]
- Sınır çıkarma fonksiyonları
lo(A)alt sınırı döndürürlo([1, 2])sonucu[1, 1]
hi(A)üst sınırı döndürürhi([1, 2])sonucu[2, 2]
- Aralık dış zarfı hesaplama desteği
hull(A), birleşimi tek bir aralık içinde sararhull([1, 2] U [99, 100])sonucu[1, 100]
- Temel matematik fonksiyonları
abs(A)örneğiabs([-10, 5])sonucu[0, 10]sqrt(A)örneğisqrt([9, 49])sonucu[3, 7]sqinv(A)örneğisqinv([4, 64])sonucu[-8, -2] U [2, 8]
- Logaritma ve üstel fonksiyonlar
log(A)örneğilog([0, 1])sonucu[-∞, 0]log2(A)örneğilog2([64, 1024])sonucu[6, 10]log10(A)örneğilog10([0.0001, 1])sonucu[-4, 0]exp(A)örneğiexp([-∞, 0] U [1, 2])sonucu[0, 1] U [2.718, 7.389]
- Trigonometrik ve ters trigonometrik fonksiyonlar
cos(A)örneğicos([pi/3, pi])sonucu[-1, 0.5]sin(A)örneğisin([pi/6, 5*pi/6])sonucu[0.5, 1]tan(A)örneğitan([pi/3, 2*pi/3])sonucu[-∞, -1.732] U [1.732, +∞]acos(A)örneğiacos([-1/2, 1/2])sonucu[1.047, 2.094]asin(A)örneğiasin([0, 1])sonucu[0, 1.571]atan(A)örneğiatan([-10, 2])sonucu[-1.471, 1.107]
- Minimum ve maksimum fonksiyonları
min(A, B)örneğimin([1, 2], [0, 6])sonucu[0, 2]max(A, B)örneğimax([0, 10], [5, 6])sonucu[5, 10]
Tam hassasiyet modu
- IEEE 754 çift duyarlıklı kayan nokta üzerinde dışa doğru yuvarlama uygulanıyor
- JavaScript
numbertipi kullanılıyor - Aynı ifade reel sayılarla ve sonsuz hassasiyetle hesaplandığında elde edilecek gerçek değerin sonuç aralığında mutlaka yer alması garanti ediliyor
- JavaScript
0.1 + 0.2örneği0.3, çift duyarlıklı kayan nokta olarak tam biçimde temsil edilemiyor- interval arithmetic,
0.3değerini içeren bir aralık hesabı yapıyor
- Tam hassasiyet modu etkin olduğunda
- Kullanıcının girdiği sayılar, yazılan ondalık gösterime en yakın IEEE 754 değeri içerecek ama iki sınırı da bu değere eşit olmayacak en küçük aralık olarak yorumlanıyor
- Çıktı sayıları kullanılabilen tüm ondalık basamaklarla gösteriliyor
Number.toString()kullanılıyor
- Tam hassasiyet modu kapalı olduğunda
- Kullanıcının girdiği sayılar, yazılan ondalık gösterime en yakın IEEE 754 değeriyle iki sınırı da aynı olan dejenere aralık olarak yorumlanıyor
- Çıktı sayıları en fazla 4 ondalık basamakla gösteriliyor
Number.toPrecision()kullanılıyor
Hatalar
- Hesap makinesinde hâlâ hatalar bulunabileceği belirtiliyor
- Sorun bildirimi için GitHub issue bağlantısı veriliyor
Açık kaynak
- Hem Interval Calculator hem de hesap makinesi motoru not-so-float açık kaynak olarak sunuluyor
- GitHub Sponsors destek bağlantısı da yer alıyor
Gelecek çalışmalar
- Tam hassasiyet modu iki ayrı denetime bölünecek
- Girdi yorumlama
- Gösterim hassasiyeti
ansdeğişkeni eklenecek- Bir önceki girişin sonucunu saklayan değişken
- Kesişim operatörü veya fonksiyonu eklenecek
Uoperatörünün önceliği daha sezgisel hale getirilecek- Boş birleşim girdisi desteklenecek
1 yorum
Hacker News yorumları
50 * (10 + [-1, 1]) = [450, 550]gibi sonuçlar doğal biçimde ortaya çıkıyor. Bunun üstüne bir union katmanı ekleyince kare fonksiyonunun gerçek ters fonksiyonu gibi şeyleri de ele alabiliyorsunuz;sqrtyerinesqinv(64)denerseniz ne demek istediğimi anlarsınız. Aslında bu interval calculator, başka bir proje olan backwards updating spreadsheet için geliştirdiğim interval union arithmetic uygulamasını denemek amacıyla yapılmıştı. Uygulama not-so-float, ilgili proje ise bidicalc ve HN tartışmasıasin(1)için Mathematica olmadan[pi/2, pi/2] + n[2pi, 2pi]biçimindeki tüm kümeyi elde edebilmek çok güzel olurdu. İkincisi, kullanıcı giriş sayılarının nasıl yorumlandığına dair açıklama biraz kafa karıştırıcı geldi. Bana kalırsa girdiyi içeren en küçük intervalin çıktı sınır değerleri, girdi değerini çevreleyen en yakın iki IEEE 754 sayısı olmalı; ama şu anki ifadeyleIEEE754(input)+[-epsilon, epsilon]gibi okunuyor ve anlam farklılaşıyor]-∞, -1] U [0.5, +∞[şeklinde; ortadaki hariç tutulan aralık da]-1, 0.5[olur. Anladığım kadarıyla min ve max de burada bu şekilde yorumlanıyor. Ayrıca sonuç alanındaki ifadeye tıklayınca ya da dokununca giriş kutusuna kopyalanması gibi bir UI fikri de kullanışlı olabilir1 / [-1, 2]gibi bir sonuç, hangi değerin ne kadar olası olduğuna dair hiçbir şey söylemiyor; hatta girdinin eşit dağıldığını varsaysak bile çıktının kesinlikle uniform distribution olmayacağı anlaşılıyor