Google'ın Git Programlama Dili'nde matematik kütüphanesi yöntemleri


9

Google Golang'da programlama yapıyorum ve kısalığı nedeniyle keyif aldım, ancak neredeyse tüm Math standart kütüphane yöntemlerinin kayan nokta türü için şaşırtıcı olduğunu düşünüyorum. Bu yöntemlerin ints için var olmasının belirli bir nedeni var mı?

Yanıtlar:


9

Kısa cevap, Go'nun C'nin bir ardılı olduğu ve C'nin standart matematik kütüphanesi de neredeyse sadece tek ve çift kesinlikli kayar nokta değerleri olarak tanımlanmıştır.

Daha uzun cevap, Go (veya C) gibi polimorfizm veya işlev aşırı yüklemesi olmayan statik olarak yazılmış bir dilde, bir işlevin önceden alınması ve geri dönmesi için bir türe karar vermeniz gerektiğidir ve matematik kitaplığınızdaki belirli türlerde, kayan nokta sayıları üzerinde tamsayılardan çok daha ilginç işlemler vardır. Birkaç örnek seçmek için

  • bir tam sayı veya kayan nokta sayısının karesi veya n. kökü genellikle bir tam sayı olarak gösterilemez

  • aşkın işlevlerin çok az ilginç değeri tamsayı olarak temsil edilebilir

  • kayan nokta değerlerinin bölünmesi, tamsayıların bölünmesinden daha az yuvarlama gerektirir

Bunun giriş değerleriniz tamsayı gibi göründüğü kadar zahmetli olmadığını unutmayın - bir integral değeri basit bir tahminle kayan nokta değerine dönüştürülebilir ve çoğunlukla doğru olur.

Go veya C gibi dillerin hikayesi budur. Diğer dillerin başka seçenekleri de vardır:

  • Dinamik olarak yazılan bir dil, çağrıldıkları öğeye veya dönüş değerinin bir tamsayı olarak gösterilip gösterilemeyeceğine bağlı olarak birden çok tür alan veya döndüren matematik kitaplığı işlevleri sağlayabilir.

  • İşlev aşırı yüklemesi olan bir dil, geçtiğiniz türlere bağlı olarak aynı işlevin birden çok sürümünü sağlayabilir (kesinlikle, bunlar yukarıda dinamik olarak yazılan durumdan farklı olarak aynı ada sahip birden çok işlevdir)

  • Tip polimorfizmine sahip bir dil (miras ile nesne yönelimli diller gibi) hem tamsayılar hem de kayan nokta değerleri için alt sınıfları olan bir üst sınıf "Sayı" tanımlayabilir ve daha sonra bu Sayı sınıfı açısından matematik fonksiyonlarını tanımlayabilir. Bu yaklaşım, statik veya işlev aşırı yükleme yaklaşımının kesinliğinin büyük kısmını korurken, dinamik dil yaklaşımının esnekliğinin çoğuna sahiptir.

Ancak Go bu özelliklerin hiçbirine sahip değildir.

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.