MATLAB- 바닥 질문
-
20-08-2019 - |
문제
저는 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))
그러면 그러한 오류는 없지만 계산이 훨씬 느려집니다.
제휴하지 않습니다 StackOverflow