2012-03-05 6 views
2
newT = [b(i) d(i) a(i) z(i)]; 
newT, b(i), a(i) 

인쇄MATLAB - 소수 할당 이상한 버그 대 정수

뉴트 =

 123   364   123   902 

ANS =

1.234e+02 

ANS =

1.234e+02 

여기에 무슨 문제가 있습니까? newT의 첫 번째 항목과 세 번째 항목이 정수 값으로 반올림 된 이유는 무엇입니까? 그들이 정확하게 할당되지 않은 이유는 무엇입니까?

답변

3

다른 프로그래밍 언어와 달리 Matlab의 정수 유형은 부동 소수점 유형보다 우선합니다. 연결 또는 산술을 통해 이들을 결합 할 때 부동 소수점 값은 부동 소수점으로 확장되는 정수 대신 암시 적으로 정수로 좁혀집니다.

>> int32(3) + 0.4 
ans = 
      3 
>> [int32(3) 0.4] 
ans = 
      3   0 

(IIRC) 매트랩 원래 모든 정수를 지원하지 않았다 그래서 matlab에 모든 숫자 상수가 두 배 값을 생성하기 때문 역사적 이유이며, 프로모션 규칙에 그것을 가능하게하기 위해 만들어졌습니다 정수형과 부동 소수점 상수를 섞어 라.

이 문제를 해결하려면 연결하기 전에 해당 int 유형을 명시 적으로 double로 변환하십시오.

newT = [b(i) double(d(i)) a(i) double(z(i))]; 
+0

멋지게 쓰여졌습니다. :) – tim