Hassasiyet kaybı olmadan gerçek bir sayıyı temsil eder


10

Geçerli kayan nokta (ANSI C şamandıra, çift) gerçek bir sayının yaklaşık değerini temsil eder . Gerçek sayıları hatasız
olarak temsil etmenin bir yolu var mı ?
İşte sahip olduğum bir fikir, ki bu mükemmel bir şey.

Örneğin, 1/3 değeri 0.33333333 ... (taban 10) veya o.01010101 ... (taban 2), aynı zamanda 0.1 (taban 3)
Bu "yapıyı" uygulamak iyi bir fikir midir :

base, mantissa, exponent

yani 1/3 3 ^ -1 olabilir

{[11] = base 3, [1.0] mantissa, [-1] exponent}

Başka fikir var mı?


12
Sadece rasyonel sayıları bu şekilde temsil edebileceksiniz.
Andrej Bauer

Bu gösterimdeki sayılar üzerinde aritmetik işlemleri uygulamayı nasıl önerirsiniz? Tabanı değiştirmek için logaritmalar mı kullanıyorsunuz? Bu IEEE kayan noktalı matematiğinden çok daha pahalı olacaktır .
David Zhang

Hiçbir fikrim yok. Ben mühendis değilim :) Açıkçası, onu donanımda uygulayamıyorum. C'de yavaş, verimsiz bir uygulama yapılabilir. Bu sadece bir deney olacaktır
6'da incud

Yanıtlar:


20

Her şey ne yapmak istediğinize bağlı.

Örneğin, gösterdiğiniz rasyonel sayıları temsil etmenin harika bir yoludur. Ancak hala veya e gibi bir şeyi mükemmel bir şekilde temsil edemez .πe

Aslında, Haskell ve Scheme gibi birçok dil, rasyonel sayılar için destek oluşturmuş ve bunları buradaa,btamsayıdır.aba,b

Bunların yaygın olarak kullanılmamasının ana nedeni performanstır. Kayan nokta sayıları biraz kesin değildir, ancak işlemleri donanımda uygulanır. Önerilen sisteminiz daha fazla hassasiyet sağlar, ancak donanımda gerçekleştirilebilecek tek bir işlem yerine, uygulanması için birkaç adım gerektirir.

Durdurma sayıları gibi bazı gerçek sayıların hesaplanamayacağı bilinmektedir . farklı olarak rakamlarını numaralandıran hiçbir algoritma yoktur , burada yeterince beklediğimiz sürece n. Basamağı hesaplayabiliriz .πn

İrrasyonel veya aşkın sayılar için gerçek hassasiyet istiyorsanız, muhtemelen bir çeşit sembolik cebir sistemi kullanmanız, ardından herhangi bir sayıda basamağa yaklaşık olarak ulaşabileceğiniz sembolik formda son bir cevap almanız gerekir. Bununla birlikte, yukarıda özetlenen kararsızlık sorunları nedeniyle, bu yaklaşım mutlaka sınırlıdır. Yaklaşık integraller veya sonsuz seriler gibi şeyler için hala iyidir.


Başka bir soru sorabilir miyim? 80'li yıllarda bir Intel mühendisi olsaydınız, gerçek sayı biçiminizi nasıl "tasarlardınız"?
incud

3
Bunu cevaplamak için çok nitelikli değilim, mühendis olmadığım için teori araştırmacısıyım. IEEE şamandıra ve çift standartlarda pek yanlış görmüyorum ve şimdi dörtlü. Daha yüksek hassasiyetli aritmetiğe bağlı birçok uygulama olduğunu düşünmüyorum ve yazılım destekli bir sürümü kullanabilenler var.
jmite

Sembolik cebir kesin gerçek aritmetik için doğru biçimcilik değildir. Keyfi olarak büyük mantislere izin veren bir temsilciliğe ihtiyacınız var.
Andrej Bauer

8
@AndrejBauer: Bir rasgele büyük mantis size tam bir temsilini istiyorsanız kurtaracak gitmiyor . 2
user2357112 Monica

@jmite çok mütevazısın :)
incud

22

Her sayının sonlu bir temsile sahip olması durumunda, tüm gerçek sayıları hatasız olarak temsil etmenin bir yolu yoktur. Sayılamayan birçok gerçek sayı vardır, ancak onları temsil etmek için kullanabileceğiniz sadece sayılabilen 1 ve 0'ların sonlu dizeleri vardır.


Her gerçek sayıyı temsil etme zorunluluğu sadece bir turing makinesinin çıktısı olabilecek gerçek sayıları kısıtlamakla sınırlanabilir. Bu sadece sayılabilen gerçek sayıların sayısıdır, ancak temsil etmek istediğiniz her sayıyı hala kapsar. Ama bu sayılarla etkili hesaplamalar yapabileceğinizi sanmıyorum.
kasperd

3
@kasperd Bunlara hesaplanabilir gerçekler denir . Ne yazık ki, eşitlik gibi şeyler hesaplanabilir gerçekler üzerinde hesaplanamaz.
David Richerby

Bu sayılar üzerinde eşitliğin hesaplanmasının durma probleminin çözülmesine eşdeğer olduğu açıktır. Bir TM göz önüne alındığında, sıfır olan çok sayıda ondalık sayı ile başlayan, tam olarak TM'nin çalışma süresi kadar, ardından da bir tane olan gerçek bir sayı tanımlanabilir. Bu sayının sıfıra karşılaştırılması, orijinal TM için durma sorununun çözülmesine eşdeğerdir.
kasperd

Bu cevap yanlış. Alan Turing, Turing makinelerini icat ettiği makinelerdeki ilk makalesinde gerçekleri sonsuz veri dizisi olarak temsil etmekten bahsediyor . Bu, sözde "Tip II Turing makinesi" fikrine yol açar ve bu fikre dayanan çok başarılı bir gerçek sayı hesaplama teorisi vardır. Ayrıca uygulamada uygulanır, cevabımı görün.
Andrej Bauer

1
Belki teknik olarak yapar, ancak gerçek sayıların mükemmel makul sonsuz gösterimleri olduğu noktasını kaçırır . Ve bu garip bir şey değil: bir TCP / IP bağlantısı veya bir Skype çağrısı veya bir kameradan gelen video akışı (potansiyel olarak) sonsuz miktarda veriye örnektir. Ne kadar bilgi verebilecekleri konusunda önceden bir sınırlama yoktur. Sınırlı bir süre içinde bundan ne kadar bilgi alabileceğiniz konusunda bir sınırlama vardır.
Andrej Bauer

7

Bir numara taban temsil ettiğinden fikri işi yapmaz mantis ile m ve üs e rasyonel sayıdır b m - e böylece temsil rasyonel sayılar ve hiçbir diğerleri için hassas çalışıyor. Temsil edemezsin bmebme örneğin.2

Tam gerçek aritmetik ile ilgilenen bir bütün hesaplanabilir matematik dalı vardır. Kesin gerçek sayıları temsil etmek için birçok veri yapısı önerilmiştir: basamak akışları, afin kontraksiyon kasılmaları, Cauchy rasyonel dizileri, ikili rasyonların Cauchy dizileri, Dedekind kesimleri, shkrinking aralıklarının dizileri, vb. bu fikirler üzerine, örneğin:

Bunlardan iRRAM en olgun ve etkilidir. Deneysel bir projede Marshall, üçüncüsü ise bir öğrenci projesi, aynı zamanda en kolay ulaşılabilir proje. Gerçek sayı hesaplama ile ilgili sorunları açıklayan çok güzel bir girişe sahip, ona bakmanızı şiddetle tavsiye ediyorum.

Bir yorum yapmama izin ver. Birisi sonsuz bir nesnenin bir bilgisayar tarafından temsil edilemeyeceğine itiraz eder. Bir anlamda bu doğrudur, ama başka bir durumda bu doğru değildir. Biz hiç bir temsil etmek asla tüm gerçek sayı, sadece bir ihtiyaç sonlu tahmininihesaplamanın her aşamasında. Bu nedenle, sadece herhangi bir kesinliğe kadar bir gerçekliği temsil edebilecek bir temsile ihtiyacımız var. Tabii ki, bilgisayar hafızamız bittiğinde bilgisayar hafızamız tükenir - ama bu temsilin kendisi değil, bilgisayarın bir sınırlamasıdır. Bu durum programlamadaki diğerlerinden farklı değildir. Örneğin, insanlar Python'da tamsayılar kullanırlar ve elbette kullanılabilir belleğin boyutunu geçemese de bunları "keyfi olarak büyük" olarak düşünürler. Bazen sonsuzluk çok büyük bir sonlu sayı için yararlı bir yaklaşımdır.

Ayrıca, çoğu zaman bilgisayarların yalnızca hesaplanabilir gerçek sayılarla başa çıkabileceği iddiasını duyuyorum . Bu iki önemli noktayı kaçırıyor. Birincisi, bilgisayarların dış dünyadan verilere erişimi vardır, bu nedenle dış dünyanın da hesaplanabilir olduğu (doğrulanamaz) varsayımı yapmak zorundayız. İkincisi, bir bilgisayarın hangi gerçekleri hesaplayabileceği ile hangi gerçekleri temsil edebileceği arasında ayrım yapmamız gerekir. Örneğin, gerçeklerin temsili olarak rakam akışlarını seçersek, hesaplanamayan bir realiteyi temsil etmek mükemmel bir şekilde mümkündür : birisi bize verirse, onu nasıl temsil edeceğimizi bileceğiz. Ancak, gerçekleri basamakları hesaplayan kaynak kodu parçaları olarak temsil etmeyi seçersek, açık bir şekilde hesaplanamayan gerçekleri temsil edemezdik.

Her durumda, bu konu en iyi şekilde daha fazla okuma ile ele alınmaktadır.


+1 ama kesinliği kaybetmeden sonlu bir dizgiyle sonsuz bir dizeyi temsil edemeyeceğinize itiraz ediyorum sorunun gerektirdiği . Elbette, istediğiniz kadar hassasiyet elde edebilirsiniz - bir rasyonel yaklaşımla tahmin edebileceğiniz gibi - ama sorunun sorması tam olarak bu değildir. Tartışmalı olarak, bu cevaptan ziyade soru ile ilgili bir sorundur.
David Richerby

2
Mesele şu ki , sonlu dizelerle temsil etmiyoruz . Sonsuz karakter dizileriyle temsil ediyoruz , ancak hesaplamanın her aşamasında böyle sonsuz dizgin sadece sınırlı bir kısmına ihtiyacımız var. Ya da başka bir deyişle: veri yapısı tüm bilgileri tuttuğu için kesinti kaybı olmaz , ancak elbette tüm bilgilere aynı anda erişemez veya işleyemezsiniz: veri yapısı size istediğiniz kadar hassasiyet verir . Darboğaz veri yapısının yanında değil, daha çok bilgiyi çıkarmak isteyen "tüketici" nin yanındadır.
Andrej Bauer

@AndrejBauer Ama gerekir bazı durumlarda, bu sembolik hesaplama sadece rakamlardan başka akışı olarak yerine miktar "özünü" veya doğayı yakalayarak, ne örn olduğu bir kerede tüm bilgilere erişmek veya işlemek. Eğer sembolik hesaplama paketi söylersen doğrulamak için , anında doğru çıktı olur. Eğer aracı kullanıyorsa öncelikle alarak, tarif etmek görünmektedirkkare kökünün basamak2'deniçin,herhangi22=2k2 bunu sona erecektirkSonuç olarak (herhangi bir sonluk için)1,99 ... 'aeşit olacaktır, yanlış cevap. Hesaplamalar sonludur. 222k1.99...
Thomas

2
@Tomlar: sembolik hesaplama gerçek sayıları temsil etmez, ancak genellikle temel fonksiyonların ve polinomların köklerinin ürettiği alanların bazı alt alanlarını temsil eder. Bu alt alanlar tam değildir (Cauchy dizilerinin sınırları altında kapalıdır) veya zorunlu olarak tam değildir (Cauchy dizilerinin hesaplanabilir sınırları altında kapalıdır). Bir temsili, tüm (hesaplanabilir) realiteleri temsil edemediğiniz sürece realitelerin bir temsili değildir : ve sembolik hesaplamalar bu durumu başarısız kılar.
Andrej Bauer

1
Sayılabilirlik hakkındaki bu açıklamalar önemsizdir çünkü hesaplanabilir gerçekler hesaplanabilir sayılamaz.
Andrej Bauer

7

Birçok etkili Rasyonel Sayı uygulaması vardır, ancak birçok kez teklif edilen ve hatta bazı mantıksızlıkları iyi idare edebilen bir uygulama Devamlı Kesirlerdir .

Darren C. Collins'in Devam Eden Kesirlerinden Alıntı :

Teorem 5-1. - Gerçek sayının sürekli kesir ifadesi, yalnızca gerçek sayı rasyonel ise sonludur.

Alıntı yapmakMathworld'den - Periyodik Devam Kesirler

... sürekli bir kesir, ikinci dereceden bir polinomun kökü ise periyodiktir.

yani tüm kökler periyodik sürekli kesirler olarak ifade edilebilir.

@AndrejBauer aslında olmadığını işaret edene kadar beni şaşırtan π için Kesin Sürekli Kesir de var .


Son cümleniz yanıltıcı. Sonlu (ya da periyodik) sürdürüldü fraksiyon bulunmaktadır . İçin sürekli fraksiyon tt sonsuz ve periyodik olmayan bir. ππ
DW

Gerçeklerin kesirlerin temsili, bir süre önce J. Vuillemin tarafından gerçek aritmetik için bir uygulama olarak önerildi. Sayılar çok yakında oldukça büyüdüğü için çok verimli olmadığı ortaya çıktı ve boyutlarını azaltmak zor.
Andrej Bauer

Devam eden kesirler, rasyonel sayıları temsil etmek için bile bazı hesaplama sorunlarına sahiptir - bir çeşit sözlük düzenini kullanarak nispeten hızlı bir şekilde karşılaştırılabilirken, tek bir sürekli kesri işlemek kolayken, CF'lere hem (ikili) ekleme hem de çarpma işlemi oldukça karmaşık işlemlerdir. uygulamak.
Steven Stadnicki

5

Yorumlarda bir dizi "kesin gerçek" öneri vardır (örn. Sürekli kesirler, doğrusal kesirli dönüşümler, vb.). Tipik yakalama, bir formüle verilen cevapları hesaplayabilmenize rağmen, eşitlik genellikle kararsızdır.

Ancak, sadece cebirsel sayılarla ilgileniyorsanız, o zaman şanslısınız: Gerçek kapalı alanlar teorisi tam, o-minimal ve karar verilebilir. Bu, 1948'de Tarski tarafından kanıtlandı.

Ama bir sorun var. Tarski'nin algoritmasını kullanmak istemezsiniz, çünkü pratik olmayan algoritmaların alabileceği kadar pratik olmayan NONELEMENTARY karmaşıklık sınıfındadır. Karmaşıklığı şu anda bildiğimiz en iyi olan DEXP'ye indiren daha yeni yöntemler var.

SAT içerdiği için sorunun NP zor olduğuna dikkat edin. Bununla birlikte, NP'de olduğu bilinmemektedir (veya inanılmaktadır).

EDIT Bunu biraz daha açıklamaya çalışacağım.

Tüm bunları anlamanın çerçevesi Memnuniyet Modülo Teorileri veya kısaca SMT olarak bilinen bir karar problemidir. Temel olarak, klasik mantığın üzerine inşa edilmiş bir teori için SAT'ı çözmek istiyoruz.

Bu yüzden birinci dereceden klasik mantıkla bir eşitlik testi ile başlıyoruz. Hangi fonksiyon sembollerini dahil etmek istiyoruz ve aksiyomlarının ne olduğu teorinin karar verilebilir olup olmadığını belirler.

SMT çerçevesinde ifade edilen birçok ilginç teori vardır. Örneğin, programların doğrulanmasına yardımcı olmak için kullanılan veri yapıları teorileri (örn. Listeler, ikili ağaçlar, vb.) Ve Öklid geometrisi teorisi vardır. Ama amacımız için, farklı türde teorilere bakıyoruz.

Presburger aritmetiği, ekli doğal sayılar teorisidir. Bu teori karar verilebilir.

Peano aritmetiği toplama ve çarpma ile doğal sayılar teorisidir. Bu teori, Gödel'in ünlü ispatladığı gibi karar verilemez.

Tarski aritmetiği tüm saha işlemleri (toplama, çıkarma, çarpma ve bölme) ile gerçek sayıların teorisidir. İlginçtir, bu teori karar verilebilir. Bu, o zamanlar oldukça sezgisel bir sonuçtu. Doğal sayıların bir "üst kümesi" olduğu için "daha zor" olduğunu varsayabilirsiniz, ancak durum böyle değildir; örneğin rasyonlar üzerindeki doğrusal programlamayı, tamsayılar üzerindeki doğrusal programlamayla karşılaştırır.

İhtiyacınız olan tek şey satisfiabilty olduğu belli olmayabilir, ama öyle. Örneğin, 2'nin pozitif kare kökünün 3'ün gerçek küp köküne eşit olup olmadığını test etmek istiyorsanız, bunu tatmin edilebilirlik sorunu olarak ifade edebilirsiniz:

x.x>0x22=0x33=0

ex

sin{xπ|sinx=0}sin

exeix


Alfred Tarski (1948), Temel Cebir ve Geometri için Bir Karar Yöntemi .


2

Cebirsel sayılar olarak adlandırılan çok büyük bir sayı sınıfını , polinomların kökleri olarak ele alarak tam olarak temsil etmek mümkündür .

πe


eeixsincos{xR|sinx=0}

@Pseudonym Bu gerçekten ilginç görünüyor, ama doğru anlamak için matematiksel altyapıya sahip olduğumu sanmıyorum ... "Tamsayılara yeterince yakın" ile ne demek istiyorsun?
Daha Fazla Eksen

Cevabımı açıklamak için değiştireceğim.
Takma ad

1

π2


Bu cevap yanlış. Gerçek bilgisayarların nasıl temsil edileceğini açıklayan tam bir gerçek aritmetik alanı vardır. Bir gerçekin sonlu bir dizeyle temsil edilmesi gerektiği varsayımı yanlıştır. Ayrıca sonsuz dizeler de kullanabiliriz. Alan Turing bunu Turing makinelerini icat ettiği ilk gazetesinde yazdı !
Andrej Bauer

Gerçek bir bilgisayarda sonsuz dizeleri nasıl saklayacağınız ve işleyeceğiniz hakkında bir makaleye bağlantı verebilir misiniz, çünkü bu sorunun sorulmasının cevabı olacaktır. Ayrıca ilk gazetesi değildi, ilk yayını 1936, gazetesi 1937 idi.
lPlant

Haklısın, 1937 gazetesi. Sonsuz dizelerin nasıl işlendiğini görmek için, örneğin TCP / IP protokolüne bakabilirsiniz. Asla tüm gerçeklerin bilgisayarda saklanması gerektiğini söylemedim.
Andrej Bauer

-1

Bir bilgisayardaki tüm gerçek sayıları temsil edemezsiniz, ancak birçoğunu temsil edebilirsiniz. Şamandıralardan daha fazla sayıyı temsil eden kesirler kullanabilirsiniz. Ayrıca, newton yöntemi altında sayıya yakınlaşacağı tahminiyle bazı polinomların kökü olarak sayıları temsil etmek gibi daha karmaşık şeyler de yapabilirsiniz.


Bu yine cehaletten üretilen yanlış bir cevaptır. Tüm gerçeklerin uygun veri yapıları ile nasıl temsil edileceğini inceleyen tam bir gerçek aritmetik alanı vardır .
Andrej Bauer

@AndrejBauer Yani herhangi bir gerçek sayıyı temsil edebilecek bir veri yapısı var mı? Bu tür herhangi bir veri yapısı, herhangi bir sayıyı temsil etmek için sayılamayan sonsuz miktarda bit kullanmak zorundadır.
Alice Ryhl

1
Bir sayılabilir bit kısıtlamasını fazla miktarı, her şeyden önce ve tek seferde hepsini gerekmez, ne de hepsini birden işleme koyduktan beri, onlar iyi uzay gibi zaman içinde saklanabilir.
Andrej Bauer

@AndrejBauer Bu cevap doğru ve çok daha az bilgi olsa da sizinkiyle aynı şeyi söylüyor. Bir bilgisayardaki tüm gerçek sayıları temsil edemezsiniz . Herhangi bir gerçek sayıyı temsil edebilirsiniz , ancak hepsini aynı anda değil. Herhangi bir şey varsa, "çok" temsil edebileceğinize itiraz ediyorum, çünkü herhangi bir bilgisayarda sadece sonlu birçoğunu temsil edebiliyorsunuz ve normal hesaplama modellerine (Turing) eşdeğer soyut bir bilgisayarda neredeyse hiç (matematiksel anlamda) neredeyse yok makine eşdeğeri).
Gilles 'SO- kötü olmayı bırak'

-1

Girişler böylece, örneğin, depolamak operasyonların bir dize olarak depolayarak gösterilebilen nerede tam olarak istenilen sayıda temsil etmek mümkündür 1/3olarak 1 divided by 3sizin için kesin bir cevap vermek için sonraki işlemi kolaylaştırabilirsiniz operasyonların iptal taşıma yoluyla, (1/3) * 3. Bu, πhesaplamalarınızda tutabileceğiniz gibi irrasyonel durumları bildiğiniz durumlarla da başa çıkabilir .

Bununla birlikte, her sayı için artan miktarda bellek gerektirir ve - basitleştiricinizin mükemmel olmadığını varsayarsak - muhtemelen üzerinde çok çalıştığınız değerler için giderek artan bir miktar gerektirir.


5+26-2=3

Aslında. Aslında, tamamen başarılı bir şekilde otomatikleştirmek muhtemelen imkansızdır. Ancak, mümkün olan en basit temsili kullanmasanız bile sonuç kesin kalır.
Jack Aidley
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.