게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
<tgmath.h> 헤더는 비주얼 스튜디오에서 사용할 수 없나요?
게시물ID : programmer_12330짧은주소 복사하기
작성자 : ㅜ_ㅠ
추천 : 0
조회수 : 542회
댓글수 : 5개
등록시간 : 2015/07/25 14:57:59
제가 포인터 배열을 이용해서 행렬을 만든 아래의 소스를 분석하려고 했는데
<tgmath.h>가 포함되어 있더군요.
VS2010에서는 아예 tgmath.h 헤더를 찾을수 없어서 컴파일이 되지 않고
CODE BLOCKS에서 GNU GCC 컴파일러로 하니까 결과값이 이상하게 나오네요.
아래의 소스인데 vs2010에서 컴파일하고 싶어서 GNU GCC컴파일러에 포함되 있는 tgmath.h를 VS2010에서 컴파일하고 있는 디렉토리에 포함해서 
#include "tgmath.h"문장을 추가해도 complex.h를 찾을 수 없다고 않되네요.
tgmath.h헤더를 사용해서 VS2010에서 컴파일해서 실행하려면 어떻게 해야 하는지 아시는분 알려 주셨으면 좋겠네요.
#include <stdio.h>
#include <stdlib.h>
#include <tgmath.h>
 
void showmat(const char *s, double **m, int n)
{
printf("%s:\n", s);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++)
printf("%12.4f", m[i][j]);
putchar('\n');
}
}
 
int trianglize(double **m, int n)
{
int sign = 1;
for (int i = 0; i < n; i++) {
int max = 0;
 
for (int row = i; row < n; row++)
if (fabs(m[row][i]) > fabs(m[max][i]))
max = row;
 
if (max) {
sign = -sign;
double *tmp = m[i];
m[i] = m[max], m[max] = tmp;
}
 
if (!m[i][i]) return 0;
 
for (int row = i + 1; row < n; row++) {
double r = m[row][i] / m[i][i];
if (!r) continue;
 
for (int col = i; col < n; col ++)
m[row][col] -= m[i][col] * r;
}
}
return sign;
}
 
double det(double *in, int n)
{
double *m[n];
m[0] = in;
 
for (int i = 1; i < n; i++)
m[i] = m[i - 1] + n;
 
showmat("Matrix", m, n);
 
int sign = trianglize(m, n);
if (!sign)
return 0;
 
showmat("Upper triangle", m, n);
 
double p = 1;
for (int i = 0; i < n; i++)
p *= m[i][i];
return p * sign;
}
 
#define N 18
int main(void)
{
double x[N * N];
srand(0);
for (int i = 0; i < N * N; i++)
x[i] = rand() % N;
 
printf("det: %19f\n", det(x, N));
return 0;
}
전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호