📄 primitive_fst.cpp
字号:
// primitive_FST.cpp: implementation of the primitive_FST class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "primitive_FST.h"
#include <math.h>
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
primitive_FST::primitive_FST()
{
}
primitive_FST::~primitive_FST()
{
}
int primitive_FST::seanindex(int m, int l, int bw)
{
int bigL;
bigL = bw - 1;
if( m >= 0 )
return( m * ( bigL + 1 ) - ( ( m * (m - 1) ) /2 ) + ( l - m ) );
else
return( ( ( bigL * ( bigL + 3 ) ) /2 ) + 1 +
( ( bigL + m ) * ( bigL + m + 1 ) / 2 ) + ( l - abs( m ) ) );
}
void primitive_FST::seanindex2(int m, int l, int bw, int *loc)
{
int bigL;
bigL = bw - 1;
/* first index for (l,m) */
loc[0] = m * ( bigL + 1 ) - ( ( m * (m - 1) ) /2 ) + ( l - m );
/* second index for (l,-m) */
loc[1] = ( ( bigL * ( bigL + 3 ) ) /2 ) + 1 +
( ( bigL - m ) * ( bigL - m + 1 ) / 2 ) + ( l - m ) ;
}
void primitive_FST::transpose(double *array, int size)
{
register int i, j;
double t1, t2, t3, t4;
for(i = 0; i < size; i += 2)
{
t1 = array[(i * size) + i + 1];
array[(i * size) + i + 1] = array[((i + 1) * size) + i];
array[((i + 1) * size) + i] = t1;
for(j = (i + 2); j < size; j += 2)
{
t1 = array[(i*size)+j]; t2 = array[(i*size)+j+1];
t3 = array[((i+1)*size)+j]; t4 = array[((i+1)*size)+j+1];
array[(i*size)+j] = array[(j*size)+i];
array[(i*size)+j+1] = array[((j+1)*size)+i];
array[((i+1)*size)+j] = array[(j*size)+i+1];
array[((i+1)*size)+j+1] = array[((j+1)*size)+i+1];
array[(j*size)+i] = t1;
array[((j+1)*size)+i] = t2;
array[(j*size)+i+1] = t3;
array[((j+1)*size)+i+1] = t4;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -