소수점 이하 자릿수를 포함하는 유형 – float, double

이러한 데이터 유형을 종종 부동 소수점 데이터 유형이라고 합니다. 숫자를 부동 소수점 숫자라고 합니다.

부동 fvar = 50.15;
이중 dvar = 50.0;

부동 소수점 데이터 유형 비교 - float 및 double

float 및 double 데이터 유형의 차이점은 소수점 이하 자릿수에 대한 정밀도에 관한 것입니다.

VexOS – ARM 7 사양에 따라 float는 6 또는 7자리를 처리할 수 있고 double은 15 또는 16을 처리할 수 있습니다. .

float: 현재 V5os에서 컨트롤러는 소수점 이하 8자리까지 허용하는 것으로 보입니다.

예를 들어

부동 fvar1 = 1.12345670;
float fvar2 = 1.12345678;

fval1은 fvar2와 다릅니다.

부동 fvar1 = 1.123456780; 
float fvar2 = 1.123456781;

fval1은 fvar2와 동일하게 평가됩니다.

double: 소수점 이하 17자리까지 허용합니다.

예를 들어

이중 dvar1 = 1.12345678912345678;
이중 dvar2 = 1.12345678912345670;

dval1은 dvar2와 다릅니다.

이중 dvar1 = 1.123456789123456789;
이중 dvar2 = 1.123456789123456780;

dval1은 dvar2와 동일하게 평가됩니다.


높은 정밀도가 필요한 경우가 아니면 "더블"을 사용하지 마십시오.

높은 정밀도가 필요한 경우가 아니면 "double"을 사용하지 말아야 하는 두 가지 이유가 있습니다.

  1. 2X float 유형을 차지합니다.
  2. 훨씬 더 높은 처리 능력을 차지합니다.

VexOS – ARM 7 사양에 따라 float는 6 또는 7자리를 수행할 수 있고 double은 15자리를 처리할 수 있습니다. 또는 16. 두 경우 모두 double 또는 float에서 마지막 숫자의 정확도에 의존해서는 안 됩니다. "부동 소수점 계산"(이 기사의 범위를 벗어남)이라는 것으로 인해 "int"를 저장하는 것과 매우 다르게 저장됩니다.

따라서 마지막 소수 자릿수에서 정확도를 잃을 수 있습니다.

double 연산은 float에 비해 비용이 상당히 많이 들고, 부동 소수점 계산이라는 문제로 인해 '정수'보다 훨씬 높습니다.

IEEE 표준에 따라 다음은 보다 안정적인 범위 내에 있습니다.

유형 가장 작은 양수 값 가장 큰 양수 값 정밀도의 #
뜨다 10 -38 x 1.17549 10 38 x 3.40282 6자리
더블 10 -308 또는 2.22507 10 308 x 1.79769 15자리

원시 데이터 유형을 교환할 수 있습니까? - 캐스팅

데이터 유형을 교환하는 것이 가능합니다. 이 기술을 "캐스팅"이라고 합니다. 캐스팅은 다소 일반적인 관행이지만 필요한 경우에만 수행하십시오.

가장 일반적인 관행 중 하나는 char 및 int를 교환하는 것입니다.

이는 둘 다 한 가지 예외를 제외하고 정수 값을 나타내기 때문입니다.

  • "int"는 4바이트(또는 일부 컴파일러에서는 8바이트)를 포함합니다.
  • "char"는 1바이트만 포함합니다.

예를 들어

문자 aVal = 100;
int iVal = aVal; // 암시적 캐스팅

또는

int iVal = (char) aVal; // 명시적 캐스팅.

암시적 잘림에 대한 주의:

예를 들어

codesnippet3.png

또 다른 일반적인 관행은 int와 float를 교환하는 것입니다.
부동 fVal = 5.486;
부동 소수점 분수 = fVal - (int)fVal; //그렇습니다: 5.486 - 5

암시적 잘림에 대한 주의:

예를 들어

정수 iVal = 50;
float fVal = iVal / 100;

이제 fVal = 0.0이 아니라 0.5입니다.

일부 시나리오에서는 종종 작업의 중요한 부분인 암시적 잘림을 활용하는 것이 좋습니다. 그러나 의도적으로 이 기술을 사용하고 있는지 확인해야 합니다.

암시적 잘림이 발생하지 않도록 하려면 명시적 캐스팅을 수행해야 합니다.

  • 암시적 캐스팅: float fVal = iVal / 100.0;
  • 명시적 캐스팅: float fVal = (float) iVal / 100

For more information, help, and tips, check out the many resources at VEX Professional Development Plus