- Menerima gabungan interval terpisah sebagai input, lalu dapat menjalankan empat operasi aritmetika dasar, pemanggilan fungsi, hingga perpangkatan, sehingga interval union arithmetic bisa dihitung langsung di browser
- Interval hasil pasti mencakup nilai yang diperoleh saat ekspresi yang sama dihitung di bilangan real menggunakan nilai-nilai yang dipilih dari gabungan input, dan pembagian dengan interval yang mencakup 0 juga dapat ditangani dalam bentuk gabungan terpisah
- Pada
1 / [-2, 1] hasilnya [-∞, -0.5] U [1, +∞], dan pada tan([pi/3, 2*pi/3]) hasilnya [-∞, -1.732] U [1.732, +∞], sehingga mendukung hasil interval tak-kontinu serta representasi batas tak hingga
- Mendukung beragam notasi dan fungsi seperti
[a, b], [a, b] U [c, d], sintaks interval bertingkat, lo, hi, hull, log10, cos, min, dan max
- Dalam mode presisi penuh, kalkulator mengembalikan interval yang membungkus nilai aktual dengan pembulatan ke luar berbasis IEEE 754 double precision; contohnya
0.1 + 0.2 ditampilkan sebagai [0.29999999999999993, 0.3000000000000001]
Ikhtisar
- Ini adalah kalkulator yang menghitung pada gabungan interval terpisah, dan mendukung implementasi interval union arithmetic selain bilangan real biasa
- Interval
[a, b] berarti semua bilangan dari a sampai b, dan [a, b] U [c, d] berarti gabungan dari interval-interval yang saling terpisah
- Ini merupakan bentuk perluasan dari aritmetika interval biasa, dan bahkan pembagian dengan interval yang mencakup 0 tetap dapat dihitung sambil mempertahankan sifat tertutup
- Menjamin sifat ketercakupan
- Jika dari masing-masing gabungan input dipilih satu bilangan real sembarang lalu ekspresi yang sama dihitung di bilangan real, maka hasilnya dijamin termasuk dalam gabungan output
- Dapat merepresentasikan ketidakpastian
- Disediakan contoh hasil
50 * (10 + [-1, 1]) menjadi [450, 550]
- Mendukung perhitungan ekspresi interval yang kompleks
- Dengan operator
U, pengguna dapat memasukkan ekspresi seperti ( [5, 10] U [15, 16] ) / [10, 100]
- Disediakan contoh hasil
[0.05, 1.6]
- Hasil operasi dapat berupa gabungan terpisah
1 / [-2, 1] menghasilkan [-∞, -0.5] U [1, +∞]
tan([pi/3, 2*pi/3]) menghasilkan [-∞, -1.732] U [1.732, +∞]
- Dalam mode presisi penuh, kalkulator ini dapat dipakai seperti kalkulator biasa sambil tetap memberikan hasil interval yang membungkus nilai aktual, termasuk masalah presisi floating-point
- Contoh hasil
0.1 + 0.2 ditunjukkan sebagai [0.29999999999999993, 0.3000000000000001]
Sintaks
- Mendukung notasi dasar
- Mendukung notasi interval
[a, b]
- Contoh
[0.5, 0.6]
- Mendukung notasi gabungan
- Mendukung bentuk
[a, b] U [c, d]
- Contoh
[0, 1] U [5, 6]
- Mendukung empat operasi aritmetika dasar dan perpangkatan
- Penjumlahan
A + B contoh ➤ [90, 100] + [-2, 2] hasil [88, 102]
- Pengurangan
A - B contoh ➤ [14, 16] - [8, 12] hasil [2, 8]
- Perkalian
A * B contoh ➤ [-5, 10] * [2, 4] hasil [-20, 40]
- Pembagian
A / B contoh ➤ [2, 4] / [-1, 2] hasil [-∞, -2] U [1, +∞]
- Perpangkatan
A ^ B contoh ➤ [2, 3] ^ [-2, 3] hasil [0.1111, 27]
- Mendukung fungsi dan konstanta
- Mendukung pemanggilan fungsi dalam bentuk
function(...)
log10([1, 10000]) menghasilkan [0, 4]
- Mendukung input nama konstanta
pi menghasilkan [3.1415926535897927, 3.1415926535897936]
- Dapat mencampur angka dan interval dalam input
- Interval dapat dimasukkan dengan sintaks kurung siku seperti
[1, 2]
- Angka seperti
3.14 ditafsirkan sebagai interval sempit dengan lebar 0, yaitu [3.14, 3.14]
- Dalam mode presisi penuh ada perbedaan detail terkait hal ini
1.55 + [-0.002, 0.002] menghasilkan [1.548, 1.552]
- Mendukung sintaks interval bertingkat
- Input seperti
[0, [0, 100]] dimungkinkan dan menghasilkan [0, 100]
- Bahkan angka-angka internal yang mendefinisikan batas interval juga ditafsirkan sebagai interval
- Dalam interval bertingkat, interval yang ditempatkan pada posisi batas akan diambil batas atasnya
- Desain ini memungkinkan aritmetika diterapkan pada batas itu sendiri
[0, cos(2*pi)] menghasilkan [0, 1]
Fungsi yang Didukung
- Mendukung konstanta
- Mendukung
inf, ∞, pi, e
[-inf, 0] * [-inf, 0] menghasilkan [0, +∞]
- Mendukung fungsi ekstraksi batas
lo(A) mengembalikan batas bawah
lo([1, 2]) menghasilkan [1, 1]
hi(A) mengembalikan batas atas
hi([1, 2]) menghasilkan [2, 2]
- Mendukung perhitungan selubung interval
hull(A) membungkus gabungan menjadi satu interval
hull([1, 2] U [99, 100]) menghasilkan [1, 100]
- Mendukung fungsi matematika dasar
abs(A) contoh abs([-10, 5]) hasil [0, 10]
sqrt(A) contoh sqrt([9, 49]) hasil [3, 7]
sqinv(A) contoh sqinv([4, 64]) hasil [-8, -2] U [2, 8]
- Mendukung fungsi logaritma dan eksponensial
log(A) contoh log([0, 1]) hasil [-∞, 0]
log2(A) contoh log2([64, 1024]) hasil [6, 10]
log10(A) contoh log10([0.0001, 1]) hasil [-4, 0]
exp(A) contoh exp([-∞, 0] U [1, 2]) hasil [0, 1] U [2.718, 7.389]
- Mendukung fungsi trigonometri dan invers trigonometri
cos(A) contoh cos([pi/3, pi]) hasil [-1, 0.5]
sin(A) contoh sin([pi/6, 5*pi/6]) hasil [0.5, 1]
tan(A) contoh tan([pi/3, 2*pi/3]) hasil [-∞, -1.732] U [1.732, +∞]
acos(A) contoh acos([-1/2, 1/2]) hasil [1.047, 2.094]
asin(A) contoh asin([0, 1]) hasil [0, 1.571]
atan(A) contoh atan([-10, 2]) hasil [-1.471, 1.107]
- Mendukung fungsi nilai minimum dan maksimum
min(A, B) contoh min([1, 2], [0, 6]) hasil [0, 2]
max(A, B) contoh max([0, 10], [5, 6]) hasil [5, 10]
Mode Presisi Penuh
- Mengimplementasikan pembulatan ke luar di atas floating-point IEEE 754 double precision
- Menggunakan tipe
number JavaScript
- Dijamin bahwa interval hasil selalu mencakup nilai aktual jika ekspresi yang sama dihitung pada bilangan real dengan presisi tak terbatas
- Mencakup kasus
0.1 + 0.2
0.3 tidak dapat direpresentasikan secara tepat dalam floating-point double precision
- interval arithmetic melakukan perhitungan interval yang mencakup
0.3
- Perilaku saat mode presisi penuh aktif
- Angka yang dimasukkan pengguna ditafsirkan sebagai interval terkecil yang mencakup nilai IEEE 754 terdekat dengan representasi desimal yang dimasukkan, tetapi dengan kedua batas tidak sama dengan nilai tersebut
- Angka keluaran ditampilkan dengan semua digit desimal yang tersedia
- Menggunakan
Number.toString()
- Perilaku saat mode presisi penuh nonaktif
- Angka yang dimasukkan pengguna ditafsirkan sebagai interval degenerat yang kedua batasnya sama dengan nilai IEEE 754 terdekat dari representasi desimal yang dimasukkan
- Angka keluaran ditampilkan hingga 4 digit di belakang koma
- Menggunakan
Number.toPrecision()
Bug
- Disebutkan bahwa kalkulator ini masih mungkin memiliki bug
- Tautan issue GitHub disediakan sebagai jalur pelaporan masalah
Open Source
- Interval Calculator dan mesin kalkulator not-so-float sama-sama dirilis sebagai open source
- Termasuk tautan dukungan GitHub Sponsors
Rencana Mendatang
- Mode presisi penuh akan dipisah menjadi dua kontrol
- interpretasi input
- presisi tampilan
- Variabel
ans akan ditambahkan
- variabel untuk menyimpan hasil input sebelumnya
- Operator atau fungsi irisan akan ditambahkan
- Intuitivitas prioritas operator
U akan diperbaiki
- Input gabungan kosong akan didukung
1 komentar
Komentar Hacker News
50 * (10 + [-1, 1]) = [450, 550]terasa alami. Jika ditambah lapisan union di atasnya, hal-hal seperti invers sejati dari fungsi kuadrat juga bisa ditangani, dan rasanya akan langsung terasa kalau mencobasqinv(64)alih-alihsqrt. Sebenarnya interval calculator ini dibuat untuk menguji implementasi interval union arithmetic yang sedang saya kerjakan untuk proyek lain, yaitu backwards updating spreadsheet. Implementasinya ada di not-so-float, dan proyek terkaitnya adalah bidicalc serta diskusi HNasin(1)kita bisa mendapatkan seluruh himpunan[pi/2, pi/2] + n[2pi, 2pi]tanpa perlu Mathematica. Kedua, kalimat penjelasan tentang cara menafsirkan angka input pengguna agak membingungkan. Menurut saya, nilai batas output dari interval terkecil yang memuat nilai input seharusnya adalah dua bilangan IEEE 754 terdekat yang mengapit nilai input itu, tetapi dari kalimat yang sekarang saya malah membacanya sepertiIEEE754(input)+[-epsilon, epsilon], jadi maknanya terasa berbeda]-∞, -1] U [0.5, +∞[seperti ini, dan interval yang dikecualikan di tengah menjadi]-1, 0.5[. Kalau saya memahaminya dengan benar, min dan max sepertinya juga ditafsirkan dengan cara seperti ini. Dan mungkin akan nyaman juga kalau ada ide UI di mana rumus pada area hasil bisa diklik atau diketuk untuk disalin ke kolom input1 / [-1, 2]tidak memberi tahu seberapa masuk akal tiap nilai, dan bahkan kalau diasumsikan inputnya uniform, outputnya jelas tampaknya bukan distribusi uniform