Sabit nokta ve keyfi hassasiyet hesaplamalarının uygunluğu


10

Çok az kayan nokta bilgi işlem kütüphaneleri / paketleri görüyorum. Kayan nokta gösteriminin çeşitli yanlışlıkları göz önüne alındığında, bu artan doğruluğun sabit nokta ile çalışmanın karmaşıklıklarına değebileceği en azından bazı alanların neden olmadığı sorusu ortaya çıkıyor .

Sabit nokta özdeğer çözücüsünün kullanımında BÜYÜK zorluklar var mı? Ne kadar yavaş / hızlı, yanlış / doğru olurlar?

İlgili: bu ve bu


Milind R, sorunuz için teşekkür ederim. Sorunuzun ilginç olduğunu düşünüyorum, ancak muhtemelen site için uygun değil. Rehberlik için sitenin SSS bölümüne bakmanızı tavsiye ederim . Sorunuza baktığımda, siteye uygun bir sorunun unsurlarının mevcut olduğunu düşünmeme rağmen, bir rantın başlangıcı olduğu izlenimini edindim. Hesaplamalı bilimde tamsayı aritmetik ve sabit noktalı aritmetik uygulamalarının olup olmadığını sormaya ve bu aritmetiklerin kayan nokta ile karşılaştırılmasını istemeye değer. Yayınınızı düzenlemenizi öneririm.
Geoff Oxberry

Evet, bir ranttan doğdu, ama bunu statüko için bir gerekçe arayışı olarak ifade ettim. Benim sorum, tahmin edebileceğiniz gibi, neden yoğun sayısallarda tamsayı ve sabit nokta matematiğine doğru büyük bir kaymaya sahip olamayacağımızla ilgili. Benim adıma düzenleyebilir misiniz lütfen? Gerçekten denedim, ama sorumun nasıl uygun olmadığını bilmiyorum.
Milind R

5
Bunun nesnel bir teknik cevabı olduğunu düşünüyorum: neredeyse herhangi bir bilimsel hesaplama (örneğin, doğrusal bir çözüm) çalıştırırsanız, tam depolama için gereken bit sayısı zaman içinde katlanarak artar. Bu nedenle, yararlı işler için yanlışlık için güçlü destek gereklidir.
Geoffrey Irving

@MilindR: Hesaplamalı geometri topluluğu, aynı zamanda yüksek performanslı ve kesin olan gerçek sayı hesaplamaları ile ilgilenmiştir. Ben tahmin Sizinle alakalı tüm pratik konular araştırmaların bu alanda görülebilir söyledi. Arayabileceğiniz bir örnek LEDA kütüphanesidir.
shuhalo

@GeoffreyIrving Üçgen matrislerde sıfırlar ne olacak? Hataya yatkın kayan noktadan başka bir şey olarak saklanamazlar mı?
Milind R

Yanıtlar:


5

Belirli noktalarda sabit nokta aritmetiği kullanımı uygun olabilir. Genellikle bilimsel bilgi işlem için (en azından çoğu insanın düşündüğü anlamda) karşılaşılan geniş dinamik aralıkların ifade edilmesi gereği uygun değildir. Bir örnek olarak özdeğer problemlerinden bahsediyorsunuz, ancak çoğu zaman bilimde, bir matrisin en küçük özdeğerleriyle ilgileniyorsunuz (örneğin, bir kuantum sisteminin temel durumunu hesaplamada). Eğer sabit noktayı kullanırsanız, küçük özdeğerlerin doğruluğu büyük öz değerlere göre genel olarak oldukça bozulur. Matrisiniz büyük oranlara göre değişen girişler içeriyorsa, küçük özdeğerler çalışma hassasiyetinde tamamen ifade edilemez olabilir. Bu sayıların temsiliyle ilgili bir sorundur; bu argümanlar ara hesaplamaları nasıl yaptığınızdan bağımsız olarak geçerlidir. Hesaplanan sonuçlara uygulamak için muhtemelen bir ölçeklendirme çalıştırabilirsiniz, ancak şimdi kayan noktayı icat ettiniz. Elemanları iyi davranan, ancak özdeğerleri son derece zayıf davranan (gibi) matrisler oluşturmak kolaydır.Wilkinson matrisleri , hatta tamamen tamsayı girişleri olan matrisler ). Bu örnekler göründükleri kadar patolojik değildir ve bilimin son noktasında birçok sorun çok kötü davranılmış matrisleri içerir, bu nedenle bu bağlamda sabit nokta kullanmak bir Kötü Fikirdir (TM).

Sonuçların büyüklüğünü bildiğinizi ve üs üzerindeki bitleri boşa harcamak istemediğinizi iddia edebilirsiniz, bu yüzden ara maddeler hakkında konuşalım. Sabit nokta kullanmak, daha yüksek hassasiyetle çalışmak için gerçekten büyük acılar geçmedikçe, felaket iptalleri ve yuvarlama etkilerini daha da kötüleştirecektir. Performans cezası çok büyük olurdu ve aynı mantis bit genişliği ile bir kayan nokta gösteriminin kullanılmasının daha hızlı ve daha doğru olacağını tahmin ediyorum.

Sabit noktanın parlayabileceği bir alan, geometrik hesaplamanın belirli alanlarındadır. Özellikle tam aritmetiğe ihtiyacınız varsa veya önceden tüm sayıların dinamik aralığını biliyorsanız, sabit nokta, temsilinizdeki tüm bitlerden yararlanmanızı sağlar. Örneğin, iki çizginin kesişimini hesaplamak istediğinizi ve bir şekilde iki çizginin uç noktalarının birim karede oturacak şekilde normalize edildiğini varsayalım. Bu durumda, kesişme noktası, eşdeğer bir kayan nokta numarası (üssü üzerindeki bitleri boşa harcayacaktır) kullanmaktan daha fazla hassasiyetle gösterilebilir. Şimdi, bu hesaplamada gerekli olan ara sayıların daha yüksek hassasiyetle hesaplanması veya en azından çok dikkatli bir şekilde yapılması gerektiği neredeyse kesindir (iki sayının ürününü başka bir sayıya böldüğünüzde, bu konuda çok dikkatli olmanız gerekir ). Bu açıdan, sabit nokta, hesaplama açısından değil, temsil açısından daha avantajlıdır ve algoritma çıktılarınızın dinamik aralığı üzerinde kesin üst ve alt sınırlar kurabildiğinizde bunun genellikle doğru olduğunu söyleyecek kadar ileri giderim . . Bu nadiren olur.

Kayan nokta temsillerinin kaba ya da yanlış olduğunu düşünürdüm (neden bir üs üzerindeki atık bitleri ?!). Ama zamanla bunun gerçek sayılar için mümkün olan en iyi temsillerden biri olduğunu fark ettim. Doğadaki şeyler kütük ölçeklerinde ortaya çıkar, bu nedenle gerçek veriler çok çeşitli üsleri kapsar. Ayrıca mümkün olan en yüksek göreceli doğruluğu elde etmek için kütük ölçeklerinde çalışmayı gerektirir, bu da bir üsün izlenmesini daha doğal hale getirir. "Doğal" bir temsil için diğer tek rakip simetrik seviye endeksidir . Bununla birlikte, toplama ve çıkarma, bu sunumda çok daha yavaştır ve IEEE 754'ün donanım desteğinden yoksundur . Kayan nokta standartlarına muazzam miktarda düşünce konulmuştur., sayısal doğrusal cebirin bir sütunu ile. Sayıların "doğru" gösteriminin ne olduğunu bildiğini düşünürdüm.


4

Tam aritmetik / sabit noktalı aritmetiğin neden bu kadar nadir kullanıldığına bir örnek olarak şunu göz önünde bulundurun:

  • Sonlu elemanlar yönteminde, bilimsel hesaplamada kullanılan hemen hemen her yöntemde olduğu gibi, sadece gerçek dünyaya yaklaşan doğrusal veya doğrusal olmayan sistemlere ulaşırız. Örneğin, FEM'de, çözülecek lineer sistem sadece orijinal kısmi diferansiyel denkleme bir yaklaşımdır (ki bu sadece gerçek dünyaya bir yaklaşım olabilir). Öyleyse neden sadece bir yaklaşım olan bir şeyi çözmek için muazzam çaba harcıyorsunuz?

  • Bugün kullandığımız algoritmaların çoğu doğası gereği yinelemelidir: Newton yöntemi, Eşlenik Degradeler, vb. Bu yinelemeleri, sorunun çözümüne yaklaşık yinelemenin doğruluğunun yeterli olduğundan memnun olduğumuzda sonlandırıyoruz. Başka bir deyişle, kesin çözüm bulunmadan sona ereriz. Daha önce olduğu gibi, sadece yaklaşık hesaplama yaptığımızı bildiğimizde neden yinelemeli bir şema için tam aritmetik kullanıyorsunuz?


İtiraf etmek sinir bozucu, ama evet, cevabınız temel olarak kesin hesaplama büyük ölçekli kullanımını çarmıha geriyor. Sanırım floatyakında hiçbir zaman arkasını görmeyeceğim .
Milind R

@MilindR: Neyi hedeflediğinizden tam olarak emin değilim. Bir çekiçiniz var gibi görünüyor ve kimsenin çivisi olmadığı veya bir çekiçin yararlı bir araç olduğunu düşünmediği için hayal kırıklığına uğradınız. Ama bunun nedeni sizi sevmememiz değil - bu sorunları uzun zamandır düşündük ve sahip olduğumuz tornavidanın uygun araç olduğuna karar verdik. Sadece bir pragmatik yaklaşım olduğu için (bir çekiçiniz yoksa) bu konuda sinir bozucu bir şey bulamıyorum - neden sadece tahminlerde kesin aritmetik kullanalım?
Wolfgang Bangerth

Sinir bozucu çünkü mükemmel bir normal problem o kadar kötü şartlandırılabilir ki etkili bir şekilde çözülemez. Ayrıca keyfi hassasiyet ideali, kayan noktanın değeri depolamaktan çıktıya kadar olan doğasıyla karşılaştırıldığında çok umut verici görünüyordu.
Milind R

Sorun, yuvarlama hatalarının analiz edilmesinin çok zor olmasıdır. Bunu sayısal analiz ve sayısal doğrusal cebir öğrenmeye başladığım gün fark ettim. Peki, sorunu tamamen önleyen, şartlanmayı bir sorun haline getiren bir sistem, dünyayı fırtınaya mı çekmeli? düşünceydi. Tabii ki sınırları anlıyorum, ama onlar anlaşmazlıklardan ziyade tahriş edici gibi görünüyorlardı. İşlemcilerde transistörlerin ölçeklendirilmesinde artan zorluk gibi. Evet, analizi zor ama Intel bunu hala yapıyor.
Milind R

2
Bir problem çözülmesi zor olacak kadar kötü durumdaysa, çözümü bozulmalara karşı kararlı değildir. Bu asıl problemle ilgili bir sorun, kayan nokta gösterimi değil. Evet, belki tam temsili kullanarak soruna bir çözüm alabilirsiniz. Ancak çözüm istikrarlı değildir ve bu nedenle gerçekten aradığınız şeyle bir ilgisi olmayacaktır. Sayıların temsilinin sorun olduğunu düşünüyorsanız yanlış ağacı havlıyorsunuz.
Wolfgang Bangerth

3

Bu kütüphaneye doğru yuvarlama için bakarsanız: CRlibm , dokümantasyonda algoritmaların genellikle doğrulanması gerektiğini (gerekçeli kanıtlarla) göreceksiniz. Neden? Bir fonksiyonun sonucunun kararlılığı ve yakınsama hızı "tek bedene uyan her şeye" cevap vermez. Kısacası, "ücretsiz öğle yemeği yok" - muhakeme doğru olduğunu kanıtlamak için çalışmak zorunda. Bunun nedeni, temel donanımın değil, modellenen işlevlerin davranışından kaynaklanmaktadır (ister tamsayı ister kayan nokta birimleri kullanın, evet ise, her ikisinde de taşma / taşma, denormal sayılar vb. Gibi "gotchas" bulunur) bir tamsayıya yakınsama arıyorsanız, sonucu bulmak için kullanılan algoritma mutlaka çok kararlı değildir.

Eigen, her biri farklı özelliklere sahip matrisleri çözmek için çeşitli algoritmalara sahip bir C ++ kütüphanesidir. Bu sayfa , bir matrisi çözmek için kullanılan çeşitli algoritmalar için hız ve doğruluk değiş tokuşlarını tartışan bir tablo içermektedir. Eigen kütüphanesinin istediğinizi yapabileceğinden şüpheleniyorum. :-)


Teşekkürler .. Çok bilgilendirici ve güzel bir bağlantı. Ancak, sabit noktanın kullanımı ve sınırlı yuvarlama kapsamı kullanılması daha doğru çıktılar sağlamaz mı? Temsilin kendisinin başlaması kesin olduğundan, kayan noktadan farklı olarak?
Milind R

1
Sorununuza başka bir açıdan saldırmanızı öneririm. Mantığa girişte, bir sorunun çözümünün üç parçası olduğunu öğrenirsiniz: tanımlar, akıl yürütme ve sonuç / sonuç. Muhtemelen (çoğumuz gibi) çoğunlukla problem çözme "tanımları" adımında çalışmaya alışkınsınız - genellikle probleminizi "tanımlayabilirsiniz"; Ancak, hayal kırıklığına uğrarsanız, bazen "akıl yürütme" bölümünde daha fazla çalışma gerektiren daha zor bir sorunla karşılaşmışsınızdır.
mda

Seni sadece belirsiz bir şekilde anlıyorum ... Bu sorunu nereden "tanımlayabildiğimi" göremiyorum, akıl yürütme esastır.
Milind R

Birkaç yıl sonra, aslında seni anladım :-)
Milind 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.