문제

저는 Matlab 초보자입니다. 문제는 다음과 같습니다.

>> a = floor(7/2.5)

a =

      2.00

>> b = rem(7,2.5)

b =

      2.00

>> c = floor(b/2)

c =

         0

C는 1이어야합니까? 왜 0인가 ???

b = 2가 다음과 같이 직접 입력 될 때는 다릅니다.

>> b = 2

b =

      2.00

>> c = floor(b/2)

c =

      1.00
도움이 되었습니까?

해결책

두 단어로 : 잘린 오류.

당신은 옳습니다. c는 정확한 산술에서 1.0이어야합니다. 그러나 REM의 인수에 플로트를 사용 했으므로 대답을 플로트로 얻습니다. 분명히 B는 정확히 2가 아니라 2.0이므로 2에 매우 가깝습니다. 따라서 B/2는 이중 1.0이됩니다. 정수 가치. 이를 방지하려면 바닥과 천장을 모두 사용하고 값을 비교하십시오.

정답을 정수로 변환하려면 바닥 대신 라운드를 사용하십시오.

다른 팁

라인을 추가하면

d = b-a

예를 들어 결과가 표시됩니다

    d =

 -4.4409e-016

즉, MATLAB은 b에 대해 2에 가까운 숫자를 계산했지만 정확히 2는 아닙니다. 이것은 부동 소수점 번호로 작업하는 데 상당히 나타납니다. 노력하다

help eps

자세한 내용은.

이런 종류의 수치 문제도 MATLAB FAQ

네, 수치 문제입니다. 당신은 그런 것들을주의해서 사용해야합니다. 정확한 산술을 원한다면 숫자에 대해 'Sym'을 시도해야합니다.

b=rem(sym(7),sym(2.5))

그러면 그러한 오류는 없지만 계산이 훨씬 느려집니다.

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