게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
float 데이터를 부동소수점 으로 출력하고 싶습니다.
게시물ID : programmer_5866짧은주소 복사하기
작성자 : NC동반질주
추천 : 0
조회수 : 1497회
댓글수 : 4개
등록시간 : 2014/10/10 01:29:14
제가 3d 프린팅에 사용되는 stl 포맷의 파일을 c++로 코딩해서 출력해야 해서 공부 하는 중인데 질문이 있습니다.
stl 포맷을 찾아보니  http://en.wikipedia.org/wiki/STL_(file_format)

다음과 같다는걸 알 수 있었습니다.
facet normal ni nj nk    outer loop         vertex v1xv1yv1z        vertex v2xv2yv2z        vertex v3xv3yv3z    endloop endfacet
그런데 각각의 숫자는 그냥 소숫점으로 입력하면 안되고 지수부와 가수로 나눠서 입력해야 한다고 하더라구요

float에 넣은 실수를
1.57+e02 처럼 출력하고 싶은데요
처음 생각엔 float 데이터비트를 건드려서 출력하면 되겠다고 생각했는데
정수를 제외하곤 << 같은 연산자를 사용 할 수 없더라구요

그래서 사용하려면 유니온 이라는 형식을 이용해야 한다고 하는데...

그래서 
#include <stdio.h>
 
// Struct BitField
typedef struct f_tran
{
 union
 {
  float fval;
  struct
  {
   unsigned mantissa : 23;
   unsigned exponet  :  8;
   unsigned sign     :  1;
  };
 };
};


int main(void)
{
 float f;
 f_tran val1;

 scanf("%f",&f);
 val1.fval=f;

 puts("-----------------");
 printf("fval    :%f\n",val1.fval);
 printf("sign    :%d\n",val1.sign);
 printf("exponet :%d\n",val1.exponet);
 printf("mantissa:%d\n",val1.mantissa);

 return 0;
}
 

다음과 같은 소스를 구했습니다.
실수를 넣으면 지수부 가수부 부호로 나눠주는 소스인데

출력되는 숫자가 제 상상과는 많이 다르더라구요
11_448.png

이런식으로 출력이 되더라구요 

제가 하고 싶은건 1.148+e01 이런식으로 출력이 되고 싶은건데 저런 형식의 가수와 지수에서 어떤식으로 가공을 해야 할까요??

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호