Gerçeklerin hesaplanması: kayan nokta vs TTE vs domain teorisi vs vs


19

Şu anda, en popüler dillerde gerçeklerin hesaplanması hala kayan nokta işlemleri ile yapılmaktadır. Öte yandan, ikinci tip etkililik (TTE) ve alan teorisi gibi teoriler uzun zamandır gerçeklerin kesin hesaplanmasını vaat etmişlerdir. Açıkça, kayan nokta hassasiyeti sorunu alaka açısından azalmadı, bu yüzden bu teoriler neden daha ana akım haline gelmedi ve neden daha göze çarpan uygulamaları yok?

Örneğin, kayan nokta hataları hakkında fazla umursamadığımız uygulama alanları var mı? Önemli karmaşıklık endişeleri var mı?

Yanıtlar:


17

Gerçek sayı hesaplamasında çalışıyorum ve keşke gerçek cevabı bilseydim. Ama spekülasyon yapabilirim. Bence bu sosyolojik bir sorun.

Gerçek aritmetik üzerinde çalışan insanlar topluluğu, yazılım geliştirmeye alışkın olmayan teorisyenlerden oluşur. Bu nedenle, genellikle uygulama görevini öğrencilere aktarırlar (dikkate değer bir istisna Norbert Müller'in iRRAM'ıdır ) veya kendi oyuncak uygulamalarına sahiptirler .

İnsanlar yapmak gerekli teorik arka plan yok mojo gerekli programlamayı var. Sağlam teorik temel olmadan kesin gerçek aritmetiği doğru bir şekilde tasarlamak zordur. Örneğin, bir fordöngüde çok sayıda gerçek sayı eklemek bir hatadır , çünkü hassasiyet kaybı nedeniyle kabul edilemez bir performans elde edersiniz. Çok fazla gerçek eklemek istiyorsanız, kısmi toplamların büyüklüğünü hesaba katarak ağaç benzeri bir yapı ile yapmalısınız. Karşıya geçmek zor başka bir şey olduğunu <ve =sadece mevcut olmayan reals toplam boole fonksiyonu olarak (eğer olabilir =o da döner ama falseyoksa uzaklaşır ve <iki eşit real verildiğinde yakınsamaktadır).

Son olarak, gerçek aritmetik için kütüphanelerin nasıl uygulanacağını bildiğimiz hiç de net değil. Bunlar sadece bazı veri türlerini ve üzerlerindeki bazı işlevleri tanımlayan alışılmış kütüphane parçaları değildir. Genellikle tam gerçek aritmetik özel kontrol modları gerektirir. Örneğin, iRRAM, programın ana yürütülmesini (kelimenin tam anlamıyla ele geçirir main) ve standart giriş ve çıkışı devralır , böylece hassasiyet kaybı meydana geldiğinde programı yeniden çalıştırabilir. Haskell'deki gerçek aritmetik kitaplığım bir Stagedmonadda (esas olarak Readermonad) gerçekleşir. Çoğu insan gerçek sayıların "sadece başka bir veri türü" olmasını bekler, ama bu konuda şüphelerim var.


Neredeyse tamamen gerçek aritmetik konusunda can sıkıcıyım, ama biri Kahan toplamını uygulayamadı mı?
jjg

1
Hmm, sanmıyorum. Kesin gerçek aritmetiği, istenen çıktı hassasiyetini elde etmek için ara hassasiyeti kendi kendine ayarlayan aralık aritmetiği olarak düşünün.
Andrej Bauer

3
Programcıların gerçek sayıların sonsuz nesneler ve programlı olarak yapılabilecekler için sonuçları konusunda anlayış eksikliğine ek olarak, donanım desteği eksikliğinin de önemli olduğunu düşünüyorum. İnsanları sadece doğruluk için önemli zaman ve bellek yükü olan bir şey kullanmaya ikna etmek zordur.
Kaveh

1
Koindüktif tiplerle gerçek hesaplamanın uygulanmasında bazı aktiviteler olduğunu gördüm. Bana göre, koindüktif türlerin doğru olması hala oldukça zor (kesinlikle uzman değilim), ama bunun gerçek hesaplamanın daha yaygın kullanımı için söz verdiğini düşünüyor musunuz?
SorcererofDM

3
Rakam akışlarını veya sabit bir yakınsama hızına sahip herhangi bir şeyi kullanan herhangi bir uygulama, çok yavaş bir şekilde yakınlaşacağı için başlangıçtan özürlüdür. Ayrıca, akışa dayalı uygulamalar, bir sonrakini elde etmek için önceki tüm tahminleri hesaplamaya zorlama eğilimindedir, bu da bir tasarım hatasıdır.
Andrej Bauer

10

Genel olarak, insanlar her zaman kayan nokta hatalarını önemsiyorlar. Ancak Andrej ile aynı fikirde değilim ve şamandıraların sosyolojik nedenlerle keyfi gerçeklere tercih edildiğini düşünmüyorum (çoğunlukla).

Gerçeklerin tam olarak hesaplanmasına karşı ana argümanın performans olduğuna inanıyorum . Dolayısıyla kısa yanıt, performans hassasiyetten daha önemli olduğunda, kayan nokta sayılarını kullanmak isteyeceksinizdir .

Akla gelen uygulama, hesaplamadaki küçük hataların birçok yaygın işlemcide bulunan özel kayan nokta birimlerini kullanarak astronomik kazanımları ile kolayca oluşturulduğu otomobillerin veya uçakların aerodinamiğini tasarlamak için hesaplamalı sıvı dinamiklerinin kullanılmasıdır .

Özellikle, sabit sayıda bit kullanarak çok sayıda gerçek sayıyı temsil etme sorunu, ilk bakışta göründüğü kadar önemsiz değildir. Sayısal simülasyonda, değerler büyük ölçüde değişebilir (örneğin türbülans olduğunda), bu nedenle sabit nokta hesaplamaları uygun değildir.

Hassasiyet donanım tarafından sabitlenmemiş olsa bile, rastgele hassasiyet sayıları kullanmak, kayan nokta sayılarını kullanmaktan birkaç kat daha yavaş olabilir. Aslında, güzel durumda bile tüm sayılar rasyoneldi, bir matrisi ters çevirme gibi basit işlemler büyük, kontrol edilmesi zor paydalara neden olabilir ( bir örnek için buraya bakın ). Birçok büyük doğrusal optimizasyon paketi, bu kesin sorun nedeniyle yaklaşık çözümler bulmak için uygun yuvarlama modlarıyla kayan noktalar kullanır (örneğin, burada bulunan programların çoğuna bakın ).


1
gerçek hesaplamanın bir biçimi ile kayan nokta hesaplaması arasında kanıtlanmış bir boşluk var mı?
SorcererofDM

1
Bildiğimden değil, korkuyorum. Sean Gao'nun gerçekler üzerindeki yaklaşık karar prosedürlerinin karmaşıklığı konusunda bazı ilginç sonuçları vardır ( tez özetine bakın ) ve elbette bir matrisin tersindeki payda, belirleyicisi gibi en kötü şekilde büyür .
cody

-6

Ben neredeyse hiç uzman değilim, ama son birkaç yıldır bu pirzolalarımı arttırıyorum. Sorun şu ki, "gerçek" sayılar sadece doğal sayılarla aynı şekilde mevcut değildir. " -ness" i sezgisel olarak kavrayan var mı? Esasen gerçek sayılar çeşitli sınır süreçleri ile tanımlanır; bu limit süreçlerinin çoğuna özel isimler verilmiştir ve bazılarına gerçeklerin önemli alt kümelerini oluşturacak kadar özeldir (örneğin cebirsel sayılar)π

Demek istediğim, eğer tam olarak hesaplayacaksanız, doğal isimlerin yanı sıra özel isimler için yer tutucular olması gerekir. Bir noktada, gerçek dünyadaki bir şeye uygulamak için tam değere yaklaşmak isteyeceksiniz. Sonuç olarak, çok özel ihtiyaçlarınız yoksa, tüm problemi en baştan yaklaşık olarak ele almak çok daha etkilidir.

Tabii ki, çok az çalışan programcı bu şekilde düşünüyor. Çoğunlukla kendi kendilerine "Gee, çiftin her zamankinden daha fazla hassasiyete sahiptir, aynı zamanda kullanabileceği gibi" diyorlar ve çoğunlukla bu en ekonomik yaklaşım. Sorun, çoğu programcıların sorun çıkardıklarında nasıl belirleyeceklerini bilmemeleri, çünkü çift duyarlıklı şamandıraların seti, sonsuz derecede küçük ...R

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.