Kalkulator yang Menghitung di Atas Himpunan Interval Terpisah
(victorpoughon.github.io)- 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 padatan([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, danmax - Dalam mode presisi penuh, kalkulator mengembalikan interval yang membungkus nilai aktual dengan pembulatan ke luar berbasis IEEE 754 double precision; contohnya
0.1 + 0.2ditampilkan 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
- Interval
- 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]
- Disediakan contoh hasil
- 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]
- Dengan operator
- 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.2ditunjukkan sebagai[0.29999999999999993, 0.3000000000000001]
- Contoh hasil
Sintaks
- Mendukung notasi dasar
- Mendukung notasi interval
[a, b] - Contoh
[0.5, 0.6]
- Mendukung notasi interval
- Mendukung notasi gabungan
- Mendukung bentuk
[a, b] U [c, d] - Contoh
[0, 1] U [5, 6]
- Mendukung bentuk
- Mendukung empat operasi aritmetika dasar dan perpangkatan
- Penjumlahan
A + Bcontoh➤ [90, 100] + [-2, 2]hasil[88, 102] - Pengurangan
A - Bcontoh➤ [14, 16] - [8, 12]hasil[2, 8] - Perkalian
A * Bcontoh➤ [-5, 10] * [2, 4]hasil[-20, 40] - Pembagian
A / Bcontoh➤ [2, 4] / [-1, 2]hasil[-∞, -2] U [1, +∞] - Perpangkatan
A ^ Bcontoh➤ [2, 3] ^ [-2, 3]hasil[0.1111, 27]
- Penjumlahan
- Mendukung fungsi dan konstanta
- Mendukung pemanggilan fungsi dalam bentuk
function(...) log10([1, 10000])menghasilkan[0, 4]- Mendukung input nama konstanta
pimenghasilkan[3.1415926535897927, 3.1415926535897936]
- Mendukung pemanggilan fungsi dalam bentuk
- Dapat mencampur angka dan interval dalam input
- Interval dapat dimasukkan dengan sintaks kurung siku seperti
[1, 2] - Angka seperti
3.14ditafsirkan 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]
- Interval dapat dimasukkan dengan sintaks kurung siku seperti
- 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]
- Input seperti
Fungsi yang Didukung
- Mendukung konstanta
- Mendukung
inf,∞,pi,e [-inf, 0] * [-inf, 0]menghasilkan[0, +∞]
- Mendukung
- Mendukung fungsi ekstraksi batas
lo(A)mengembalikan batas bawahlo([1, 2])menghasilkan[1, 1]
hi(A)mengembalikan batas atashi([1, 2])menghasilkan[2, 2]
- Mendukung perhitungan selubung interval
hull(A)membungkus gabungan menjadi satu intervalhull([1, 2] U [99, 100])menghasilkan[1, 100]
- Mendukung fungsi matematika dasar
abs(A)contohabs([-10, 5])hasil[0, 10]sqrt(A)contohsqrt([9, 49])hasil[3, 7]sqinv(A)contohsqinv([4, 64])hasil[-8, -2] U [2, 8]
- Mendukung fungsi logaritma dan eksponensial
log(A)contohlog([0, 1])hasil[-∞, 0]log2(A)contohlog2([64, 1024])hasil[6, 10]log10(A)contohlog10([0.0001, 1])hasil[-4, 0]exp(A)contohexp([-∞, 0] U [1, 2])hasil[0, 1] U [2.718, 7.389]
- Mendukung fungsi trigonometri dan invers trigonometri
cos(A)contohcos([pi/3, pi])hasil[-1, 0.5]sin(A)contohsin([pi/6, 5*pi/6])hasil[0.5, 1]tan(A)contohtan([pi/3, 2*pi/3])hasil[-∞, -1.732] U [1.732, +∞]acos(A)contohacos([-1/2, 1/2])hasil[1.047, 2.094]asin(A)contohasin([0, 1])hasil[0, 1.571]atan(A)contohatan([-10, 2])hasil[-1.471, 1.107]
- Mendukung fungsi nilai minimum dan maksimum
min(A, B)contohmin([1, 2], [0, 6])hasil[0, 2]max(A, B)contohmax([0, 10], [5, 6])hasil[5, 10]
Mode Presisi Penuh
- Mengimplementasikan pembulatan ke luar di atas floating-point IEEE 754 double precision
- Menggunakan tipe
numberJavaScript - Dijamin bahwa interval hasil selalu mencakup nilai aktual jika ekspresi yang sama dihitung pada bilangan real dengan presisi tak terbatas
- Menggunakan tipe
- Mencakup kasus
0.1 + 0.20.3tidak 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
ansakan ditambahkan- variabel untuk menyimpan hasil input sebelumnya
- Operator atau fungsi irisan akan ditambahkan
- Intuitivitas prioritas operator
Uakan 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