문제

FORTRAN은 이중 정밀 번호를 적분 값으로 변환하는 몇 가지 기능을 제공합니다. 잘림/반올림에 사용되는 방법은 다릅니다. 나는 이것을 사용하는 복잡한 과학 알고리즘을 변환하고 있습니다.

Fortran 문서에 따르면 :
Aint (x) 가장 가까운 x와 0 사이의 적분 값을 반환합니다.
anint (x) 중간 케이스가 크기가 더 큰 적분 값으로 반올림되는 것을 제외하고는 가장 가까운 적분 값을 X로 반환합니다.
닌 (X) 중간 케이스가 크기가 더 큰 int 값으로 반올림되는 것을 제외하고는 x를 int 형식으로 결합하여 가장 가까운 Int 값으로 변환합니다.

누구든지 C#에서 이들을 구현하는 사람이 있습니까?그것을 올바르게 얻는 것은 까다로울 수 있습니다.

(int) x는 aint ()와 일치하는 것으로 보입니다.
convert.toint32 (x)는 위의 것 중 어느 것과 일치하지 않습니다.
Trunc (x)는 위의 것과 일치하지 않습니다.
라운드 (x)는 anint 또는 nint와 일치 할 수 있습니다.

ANINT와 NINT의 차이는 리턴 유형 인 것으로 보이며, 여기서 ANINT는 이중 정밀도 값을 반환하지만 NINT는 정수를 반환합니다. 둘 다 사용됩니다 (Acutal Sample) :
이중 정밀 A, B, C, D, E, F, G
... 여기에 설정된 값 ...
f = anint (ab) + anint (cd) + anint (b + de)
g = nint (f) + 1d0;
아마도 Fortran 전문가는 저자가 왜 두 가지를 모두 사용하기로 선택했는지를 명확히하는 데 도움이 될 것입니다 (나는 그것이 의도적이라고 가정합니다).

도움이 되었습니까?

해결책

통화 정의에서 nint 그리고 anint 제공합니다 Math.Round 사용 MidpointRounding.AwayFromZero.

을 위한 aint, 명백한 캐스트 double 에게 int 그 결과를 달성 할 것입니다.

다른 팁

내가 볼 수있는 것에서 aint() 그냥이야 Math.Floor().

다른 두 사람의 경우, 유일한 차이점은 반환 유형이라고 생각합니다. nint() 실제 정수를 반환합니다 anint() 필수 값을 가진 이중 (Fortran : Real)을 반환합니다.

기능 ANINT의 구현이 있습니다. 코드를 따르십시오.

double anint(double x)
{
    int a;
    double y;

    a = (int)x; //a=9

    if (10 * x - 10 * (double)a >= 5)
    {
        a = a + 1;
    }

    y = (double)a;

    return y;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top