Bilimsel hesaplama yazılımı modern araştırma, mühendislik tasarımı ve veri odaklı keşif biçimlerinin arka kemiğini oluşturur. İklim simülasyonlarından ve ilaç keşfinden finansal risk modelleme ve havacılık mühendisliğine kadar, bu uygulamalar sayısal tuzakları ve doğruları doğru bir şekilde ele almak ve kodlar büyüdükçe, bu niteliklerin giderek daha zor hale getirilmesini sağlar.Refaksiyonel- dışsal davranışını değiştirmeden mevcut kodu yeniden yapılandırma işlemi - doğru ve hassas bir şekilde ele almak için güçlü bir araç.

Bilimsel Hesaplamada Doğru ve Hassasiyet Anlamak

Yeniden faktörleme stratejilerine girmeden önce, bir uydunun doğruyu ve hassasiyetini gerçek yörüngeye uyguladığı için açıklamak önemlidir; kilometreden uzakta olan bir simülasyon yalnızca doğru veya kabul edilen değere nasıl yakınlaştığını belirtir.[Dönetici 3 ).

Ortak bir yanlışlık, doğru ve hassastır. Uygulamada, bir hesaplama kesin olabilir (çok sayıda basamaklı) ancak sistemli önyargılar veya doğrulayıcılık nedeniyle, ancak sonuç sadece birkaç basamakta doğrulanırsa, bilimsel yazılım için de güvenilir olmalıdır.

Alttaki Hak ve Hassasiyet

Bilimsel kodbases, erode sayısal kaliteyi tanımanın yollarının teknik bir borcu oluşturur. Bu zorlukların tanınması hedefli refaksiyona yönelik ilk adımdır.

Yüzen-Point Rounding Hatalar

Hemen hemen tüm bilimsel hesaplamalar IEEE 754 yüzen noktaya kadar arithmetic.Üyesel olarak, bu küçük hatalar, ancak sonlu sayıda basamaklar depolanabilir.[Dönder, ekstraksiyon, multiplikasyon ve bölüm iki sayıyı ortadan kaldırmak için yuvarlak olmalıdır, önemli sayıdaki adımları atlatmak gibi, bu küçük hataların büyük bir kısmını hesaplamak için toplanabilir.) Klasik bir örnektir.[Dönemli bir dizi hatadır.[Dönemli iptal işlemleri[Dönemli iptal işlemleri[Dönemli)

Numerical Instability

Bir algoritma, girişte küçük perturbasyonlar veya ara hesaplamalar nihai sonuçta büyük hatalara yol açıyorsa sayısal olarak dengesizdir.Instability genellikle hasta-konuşturma problemlerinden (örneğin, neredeyse tekil lineer sistemler) veya algoritmaların çözümü, örneğin, doğru görünen olası sonuçlar üretmektir.

Miraç Kodu ve Zavallı Modülerity

Birçok bilimsel yazılım projesi Fortran, C, veya C++'ın erken versiyonlarında yazılmış onlarca yıllık koda sahiptir. Bu kodbases genellikle modüler yapıdan yoksundur ve test ve iyileştirme için sayısal çekirdekleri izole etmeyi zorlaştırabilir. Fonksiyonlar, küresel devlet ve yan etkilerle birlikte, karmaşık analizler ortaya çıkabilir.

Eşitlik Birimi ve Regresyon Testleri

Bilimsel kod test etmek için çok zor, çünkü beklenen çıktılar genellikle analitik olarak bilinmemektedir. Birçok proje sadece deneysel verilere karşı sonuçları karşılaştıran entegrasyon testlerine güvenir, ancak bu testler büyük bir başarısızlık nedeniyle sayısal gerilemeler yakalamayabilir.

Hız için Teşrife Doğruluğu

Performans basıncı genellikle geliştiricilerin hızlı ama yanlış olmayan algoritmaları seçmelerini sağlar. Örneğin, bir naif summasyon döngüsü hızla çalıştırılabilir, ancak belirli koşullar altında yanlış olan yuvarlak hatayı doğrusal olarak bir araya getirir. Benzer şekilde, büyük bir matrix doğrudan O(n3) ama sayısal olarak LU decomposition ile bir sistemi çözmeden daha az istikrarlıdır.

Doğruyu ve Hassasiyetleri Geliştirmek için Stratejileri Yeniden Düşünmek

Bu zorlukların sayısal istikrarı geliştiren, yuvarlak hata azaltan ve kodun korunmasında fayda sağlayan hedefli değişikliklerle ele alınması. Aşağıdaki stratejiler önemli gelişmeler elde etmeyi kanıtlanmıştır.

Deprecated veya Imprecise Mathematical Functions

Modern derleyiciler ve standart kütüphaneler birçok matematiksel işlevin gelişmiş uygulamaları sağlar. Örneğin, [[C++17'da belirtilen hesaplamalar, standart, iyi test edilen alternatiflerle uygulanan standart, doğrulanmış ancak aynı zamanda bakım yükünü azaltır.

Compensated Summation Algorithms

Kahan summasyon algoritması, kayıp basamaklar için bir dizi eklemek için önemli ölçüde kısa sürede hata azaltan klasik bir tekniktir.Kahan summasyon bir hata terimini izler ve her bir telafi için telafi etmek için ek olarak ayarlanır. algoritma, büyük diziler için sadece birkaç ekstra işlem ekler, özellikle de çok büyük ve çok küçük değerlere sahip olanlar için doğru bir şekilde doğrulanabilir.

Yüksek çözünürlük veya Arbitrary-Precision Arithmetic Stratejik Olarak Kullanın

Refaksiyon, kritik hesaplamalar için kullanılan sayısal türü yükseltmeyi içerebilir. Örneğin, tek taraflı karar verme işlemine geçiş yapmak için aşağıdakiler için geçerlidir.Refaksiyon, değişken hataların çeşitli emirleriyle sıralayabilir. aşırı durumlarda, MPFR veya Boost gibi kütüphaneler için çok fazla sayıda hata sunar. #precision yüzen sayılara sahip olmak için[değiştir | kaynağı değiştir]

Catastrophic Cancellation'ı Minik Yeniden Yapı Kodu

Catastrophic iptali, iki eşit miktardan çıkarılmasında meydana gelir. Rephane (b2-4ac) / (2) Eğer b büyük ve pozitif ise, terim -b + √(b2-4ac) iki yakın sayının köklerini ortadan kaldırır, genellikle x = (-b ± √ (b2-4ac) / 2 ) Diğer bir deyişle, diğer her türlü bilgiyi hesaplamak için "Tmetici" ile ilgili olarak kullanılır.

Hedeflenen Test için Numericalelekler

Büyük, monolithic fonksiyonlar, hareket denklemlerini ve tüm pozisyonları güvenli bir şekilde geri almak zor. Anahtar strateji, küçük, iyi tanımlanmış rutinlere sayısal hesaplamaları izolasyonda test edilebilir. Örneğin, bir simülasyon döngüsü, hareket denklemlerini entegre edebilir ve tüm görevleri tek bir işlevde güncelleyebilir.Refaksiyonu bir şekilde doğruya doğrulayabilir, 3.Mart'a kadar tasarlayabilir.

Hedef Numerical Özelliklere Sahip Kapsamlı Birim Testleri Ekle

Test olmadan rektörlük tehlikelidir.Doğru ve hassaslığı geliştirmek için, geliştiriciler potansiyel zayıflıkları ortaya koyan test vakalarını tasarlayabilmeli. Örnekler, çok büyük ve çok küçük sayılarla bir susamlama rutinine eklenerek, neredeyse tekil lineer sistemlerle ve hesaplama türevlerini kullanarak, küçük bir adım boyutları kullanarak analiz etmelidirler. Referans değerleri daha yüksek çözünürlükte artış gösterir.[0: 5 ) IEEE modları ile standart bir şekilde anlamak için standart bir şekilde doğrulanır.

Bilimsel Yazılımlar için En İyi Uygulamalar

Yeniden düzenleme planlama, araçlama ve kültürel satın alma gerektiren bir disiplindir. Aşağıdaki en iyi uygulamalar doğruluk ve hassaslık için faydaları en üstlenir.

Mevcut Kodbase'in Thorough'u anlamaya başlayın

Yeniden denemeden önce, kod incelemesine zaman yatırım yapmadan, statik analiz ve profilleme. Hangi sayısal algoritmaların kullanıldığını ve hataların çoğunun muhtemelen olduğunu tanımlayın.Kullanım: 03.Bölüm 7) ve [[DüzDÜSÜSÜSÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜŞÜNÜ, LÜMÜ, BÜTÜŞÜN

Yüksek Impact Alanları Önce

Tüm refaksiyon eşit fayda sağlar. İlk olarak, çoğu zaman idam edilen kod yollarına odaklanın veya bu modüller yatırıma en hassas hesaplamalara geri dönüyor. Örneğin, bir Monte Carlo simülasyonunda ana hata veya entegrasyon rutini.

Version Control ve Stratejik Olarak Kullanımı

Her rektör değişikliği ayrı olarak işlenmelidir ve motivasyonu açıklayan ve beklenen etkiyi açıklayan açık bir taahhüt mesajı ile birlikte olmalıdır.Köpektif olarak farklı sayısal gelişmeler hakkında çalışmak için birden fazla geliştiricinin ortak bir şekilde çalışmasını sağlar ve kod incelemesini kolaylaştırmak için özellikle de bu iş akışı aynı zamanda geri dönüş için doğrulayıcı bir şekilde basitleştirir.

Sürekli Test Hassasiyeti ve Hassasiyet

Birim testleri, sürekli bir bütünleme hattının parçası olarak otomatik olarak yapılmalıdır. Fonksiyonel bir düzeltmeye ek olarak, bir referansa göre sayısal hatayı ölçen testler içerir. Çünkü yüzen nokta sonuçları, derleyici optimizasyonlar ve donanım platformları için hassastır, testlerin küçük bir göreceli veya mutlak toleransa izin vermesi gerekir.Bir testin başarısız olduğu zaman, ekip derhal refaksiyonel bir regresyon tanıtıp tanıtıp tanıtıp ortaya koymanın sayısal bir regresyon tanıtıp ortaya çıkmadığını araştırabilir.

Doküman Değişiklikleri ve Justifications

Sayısal gelişmeler genellikle incedir. Yeniden faktörleme yaparken, alıntı yapanların kod değiştirmesinden çok daha değerli olduğunu yorumlar ekleyin.(0)why), belirli bir algoritma veya formül seçilir. Örneğin, "Using Kahan summation to reduce rounding error when summing forces" sadece kodu değiştirmeden daha değerli. Dokümantasyon, gelecekteki koruyucuları anlamak ve yanlışlıkla iyileşmeyi önlemeye yardımcı olur.

Gerçek Dünya Güvenilirliğinin Etkisi

Sistematik refaksiyonun faydaları teorik değildir. İklim modellemesinde, bir naif summasyonu telafi eden bir algoritma ile küresel enerji bütçelerinde bir boyuta kadar kaymayı azaltın. Finansal risk analizinde, ikiden dört katına çıkarmanın temel fiyatlandırmada belirginleştirilmesi, firmanın milyonlarca maliyeti olan bir yatırım olduğunu gösteriyor.

Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç Sonuç

Bilimsel hesaplama yazılımı, doğrulama ve hassaslık standartlarını talep eder. Bu uygulamalar boyut ve karmaşıklıkta büyürken, yeniden faktörleme, sayısal kaliteyi korumak ve geliştirmek için gerekli bir uygulama haline gelir.Sürekli olarak elde edilen işlevleri yerine getirmek, istikrarlı algoritmaları benimsemek, modüler kod ve titiz testler eklemek, gelişim ekipleri sadece yazılım yaşam döngüsünün bilimsel bütünlüğünü ortadan kaldırmak için gerekli olan sonuçları ortadan kaldıramaz ve önerilerde bulunacaktır.