2014-10-21 2 views
-1

나는 초보자입니다. 저는 SharpDevelop에서 처음 몇 정수의 제곱근을 단순히 계산하는 작은 C# 프로그램을 만들었습니다. 여기있다 :SharpDevelop의이 작은 C# 프로그램에서 "double"대신 "float"을 사용할 수없는 이유는 무엇입니까?

public static void Main(string[] args) 
    { 

     int i; 

     XXXXX[] t = new XXXXX[40]; 

     for(i=0; i<t.Length; i++) 
     { 
      t[i]=Math.Sqrt(i); 
     } 

     for(i=0; i<t.Length; i++) 
     { 
      Console.WriteLine(""+t[i]); 
     } 

     Console.ReadKey(true); 
    } 

내 질문은 :

나는 "더블"대신 "XXXXX"의 쓸 때 내 프로그램의 작업을 수행하지만 "부동"를 쓸 때 대신 작동하지 않는 이유 "XXXXX"?

나는 선생님이 double이 더 정확하다는 점을 제외하고는 float와 double이 비슷하다고 말하는 것을 들었다고 생각했습니다. 그래서 왜 double 대신 double float을 사용할 수 없는지 이해하지 못합니다.

답변

6

Math.Sqrt()double 반환 그래서, 당신은 컴파일 오류가 발생합니다. float의 정확도는 double보다 적으므로 세부 정보가 손실 될 수 있습니다.

floatdouble에 대한 설명서를 참조하십시오.

명시 적 숫자 변환 할 수 있습니다 : 작은 상자로 부동의

t[i] = (float)Math.Sqrt(i); 
2

단순히 Math.Sqrt이 double을 반환하기 때문입니다. float

캐스트 필요한 경우 (하지만 당신은 참으로 정밀도를 잃게됩니다) : 당신이 float에 할당 할 때

t[i]=(float)Math.Sqrt(i); 
1

을), 더블 박스를 큰 박스 (메모리 용량)라고 생각하면됩니다. 이제 Math.Sqrt가 박스에 넣을 큰 물건 (실제로는 숫자)을 준다는 것을 고려하십시오. 두 배 (큰 상자)를 사용하면 주어진 물건이 멋지게 들어 맞습니다. float (작은 상자)를 사용하면 문제가 발생하지 않으므로 상자에서 찌그러 뜨리려면 정밀도를 떨어 뜨려야합니다.

0

생각해 (실제로 양 : 당신은 플로트에 명시 Math.Sqrt(i)의 결과를 변환해야

t[i]=(float)Math.Sqrt(i);