1. Float 형의 오차 발생 이유와 범위

  • 고정 소수점(Fixed Point) vs 부동 소수점(Floating Point)
  • float은 부동 소수점이라는 의미이며 부동 소수점이 고정 소수점보다 큰 수를 다룰 수 있다.
  • 고정 소수점은 정수부를 표현하는 비트와 소수부를 표현하는 비트가 나눠져있는 반면에 부동 소수점은 유효숫자를 표현하는 비트와 몇 승으로 이루어진 지를 표현하는 비트가 나눠져 있다.
  • 0.5, 0.25, 0.125, 0.0625, ... 의 방식으로 소수점 밑 부분을 표현하기 때문에 0.1 이라는 숫자를 정확히 표현할 방법이 없다.
  • float의 경우 대략 10의 38승까지 표현할 수 있고 이는 엄청 큰 숫자인 것이 int형이 대략 21억, 10의 10승 정도 밖에 표현하지 못 한다.

 

2. int, float을 string 으로 변환

  • 사용하는 측면에 있어선 #include <string> 후 to_string 함수를 이용하면 된다.
#include <iostream>
#include <string>

int main()
{
	std::string Test;
	int IntNumber = 123;
	float FloatNumber = 123.456f;
	double DoubleNumber = 456.789;
	char TestChar = 'c';

	Test = std::to_string(IntNumber);
	std::cout << Test << std::endl;
	Test = std::to_string(FloatNumber);
	std::cout << Test << std::endl;
	Test = std::to_string(DoubleNumber);
	std::cout << Test << std::endl;
	Test = std::to_string(TestChar);
	std::cout << Test << std::endl;

	return 0;
}

 

3. string을 int, float으로 변환

  • #include <string> 후 stoi 혹은 stof, stod, stoll (i : int, f : float, d : double, ll : long long)
#include <iostream>
#include <string>

int main()
{
	std::string Test("123");
	int IntNum = std::stoi(Test);

	std::cout << IntNum << std::endl;

	Test = "123.456";
	float FloatNum = std::stof(Test);
	
	std::cout << FloatNum << std::endl;

	return 0;
}

+ Recent posts