2016-04-08 28 views
0

Java’da yeniyim. Her 15 derece aralık için sin, cos ve tan değerlerini yazdırmak istiyorum. Gerçekten anlamıyorum her Math.x() hattı için Java: 'Math.sin()' Kullanırken Olası Hassasiyet Kaybı `

public class W3Aufgabe5 { 
    public static void main(String[] args) { 

     System.out.printf("%6s%6s%6s%6s%n", "Angle", "Sin", "Cos", "Tan"); 
     System.out.println("------------------------"); 

     for (float angle = 0; angle <= 180; angle += 15) { 

      float sin = Math.sin(Math.toRadians(angle)); 
      float cos = Math.cos(Math.toRadians(angle)); 
      float tan = Math.tan(Math.toRadians(angle)); 

      System.out.printf("%6d%6d%6d%6d%n", angle, sin, cos, tan); 
     } 
    } 
} 

, derleyici baskılar

error: possible loss of precision
required: float
found: double

. Her zaman float kullanıyorum bile neden double gerektiriyor?

+0

Günahlarınız neden günahlarınız var? Float kullanmak için gerçek bir nedeniniz olmadığı sürece sadece çift kullanın. görüntü işleme veya grafik. – matt

cevap

2

trigonometrik yöntemler sin, cos, tan ve toRadians her bir parametre olarak double kabul double döndürür. float s'yi kabul eden aşırı yük yok ve float s. double'u bekleyen bir yönteme float geçmek yasaldır; örtük olarak genişletilecektir. Ancak sonuçları float s'ye atadığınızda, double'u float'a daraltamazsınız.

İstersen açıkça float sonuçları döküm, ancak double daha hassas olsun, yani double s olarak sin, cos ve tan değişkenleri bildirmek. Ayrıca, d biçim belirteci, kayan nokta değerleri değil, tamsayı değerleri anlamına gelir. format specifier f instead of d'u kullanın. Ayrıca, yazdırırken değerleriniz arasında boşluk bırakmak isteyebilirsiniz.

+0

Teşekkürler, bu işe yaradı. Ben f 've 'd' formatı belirteçleri float ve çift – flufflepuff

+0

Hayır," f "anlamına gelir" sabit nokta "(biçim olarak), üstel veya mühendislik ve' g' için e 'seçer en uygun Java yazdırma işlevinin temelini oluşturan C yazdırma formatı dizelerine bakın. – LutzL

0

API documentation'a bakarsanız, trig yöntemlerinin hepsinin iki katına çıkacağını görürsünüz. Gerçekten bir yüzmeye ihtiyaç duymadığınız sürece, en iyi bahsiniz yerine çiftler kullanmak olacaktır. Hassasiyetinizi kaybedersiniz çünkü çift dönüş değerlerinizi floatlara zorlamak zorundasınız.

İlgili konular