2017-12-03 8 views
0

나는 C#에서 나눗셈에 문제가있다. + 무한대와 -infity가있다.이중 값 나누기

double Sunrise = 0.0; 
double Sunset = 0.0; 
double Daylength = 0.0; 
Sunrise = 12 - Math.Acos(CosWo)/(15/360 * 2 * Math.PI); 
Sunset = 12 + Math.Acos(CosWo)/(15/360 * 2 * Math.PI); 
Daylength = 2 * Math.Acos(CosWo)/(15/360 * 2 * Math.PI); 

내가 내가 가진 일몰 일출과 daylength의 결과 + 자신의 값을 무한대 -infity를 인쇄, 내가 무엇을해야이 문제를 해결하는 : 나는이 코드를 가지고있다. -

+0

디버거 사용 ;-) –

답변

3
당신은 정수 값 (360)에 의해 분할되어

가 다음을 수행하십시오 :

Sunrise = 12 - Math.Acos(CosWo)/(15/360.0 * 2 * Math.PI); 
Sunset = 12 + Math.Acos(CosWo)/(15/360.0 * 2 * Math.PI); 
Daylength = 2 * Math.Acos(CosWo)/(15/360.0 * 2 * Math.PI); 
3

짧은 이야기 15/360가 (때문에 정수 나누기의)는 0을 반환하고 Math.Acos(CosWo)/0+/-Infinity이 될 것입니다, Math.Acos(CosW)의 값에 따라 다릅니다. double을 사용하도록 코드를 변경하면 15.0/360.0 * 2.0 * Math.PI이 문제를 해결해야합니다.

더 자세한 설명 : 0으로 나눌 때

당신은 두 배의 값으로 +Infinity/-Infinity를 볼 수 있습니다. 그것에 대해 생각해 보자. 숫자를 0으로 나누면 기술적으로 예외가 발생한다. .NET은 정수 나누기 (1/0은 DivideByZeroExeption을 던질 것이다.) 복식의 경우 IEEE-754 표준 (https://en.wikipedia.org/wiki/IEEE_754)은 0으로 나누면 +/-Infinity이 될 것이라고 정의합니다. 생각해 보면 0에 가까운 더 작은 숫자와 작은 숫자로 나누면 무한대로 갈 것입니다 (1/0.1, 1/0.001, 1/0.0001 등을 시도하고 직접보십시오).