2013年7月 初版
会場: 天文データセンター
#include <stdio.h>
#include <math.h>
namespace safe /* ネームスペース「safe」の開始 */
{
inline static double acos( double x )
{
const double d = 0.0000001; /* 許容する誤差 */
if ( x < -1 ) {
if ( x < -1 - d ) ::fprintf(stderr,"[WARNING] %s: arg is %.15g\n",
__PRETTY_FUNCTION__, x);
x = -1;
}
else if ( 1 < x ) {
if ( 1 + d < x ) ::fprintf(stderr,"[WARNING] %s: arg is %.15g\n",
__PRETTY_FUNCTION__, x);
x = 1;
}
return ::acos(x); /* 「::」を書き忘れると自身を呼び出してしまうので注意 */
}
inline static float acos( float x )
{
const double d = 0.0000001; /* 許容する誤差 */
if ( x < -1 ) {
if ( x < -1 - d ) ::fprintf(stderr,"[WARNING] %s: arg is %.15g\n",
__PRETTY_FUNCTION__, x);
x = -1;
}
else if ( 1 < x ) {
if ( 1 + d < x ) ::fprintf(stderr,"[WARNING] %s: arg is %.15g\n",
__PRETTY_FUNCTION__, x);
x = 1;
}
return ::acosf(x);
}
} /* ネームスペース「safe」の終了 */
int main()
{
::printf("acos = %g\n", ::acos(1.1));
::printf("safe acos = %g\n", safe::acos((double)1.1));
::printf("safe acos = %g\n", safe::acos((float)1.1));
return 0;
}
#include <stdio.h>
#include <math.h>
template <class datatype>
inline static double get_mean( const datatype vals[], size_t n )
{
double sum = 0;
size_t i;
for ( i=0 ; i < n ; i++ ) sum += vals[i];
return sum / (double)n;
}
int main()
{
double v0[] = {10,20,30,40,50,60,70,80,90,100};
const size_t n_v0 = sizeof(v0) / sizeof(*(v0));
float v1[] = {1,2,3,4,5,6,7,8,9,10};
const size_t n_v1 = sizeof(v0) / sizeof(*(v0));
printf("mean of v0 = %g\n", get_mean(v0,n_v0));
printf("mean of v1 = %g\n", get_mean(v1,n_v1));
return 0;
}
#include <sli/stdstreamio.h>
#include <sli/digeststreamio.h>
#include <sli/tarray_tstring.h>
#include <sli/tstring.h>
#include <math.h>
using namespace sli;
int main( int argc, char *argv[] )
{
int ret_status = -1;
stdstreamio sio; /* stdin, stdout and stderr */
digeststreamio f_in; /* for local file */
if ( 1 < argc ) {
const char *filename = argv[1];
tstring line; /* buffer for a line */
tarray_tstring elms;
/* open a stream */
if ( f_in.open("r", filename) < 0 ) {
sio.eprintf("[ERROR] cannot open: %s\n",filename);
goto quit;
}
/* read text line by line */
while ( (line=f_in.getline()) != NULL ) {
double ra, dec;
line.chomp(); /* erase "\n" */
elms.split(line, " ", false);
ra = M_PI * elms[1].atof() / 180.0;
dec = M_PI * elms[2].atof() / 180.0;
if ( elms.length() == 3 ) {
sio.printf("%s %s %s %g %g %g\n",
elms[0].cstr(),elms[1].cstr(),elms[2].cstr(),
cos(ra)*cos(dec), sin(ra)*cos(dec), sin(dec));
}
}
/* close stream */
f_in.close();
}
ret_status = 0;
quit:
return ret_status;
}
実行結果(最初の4行):
M1 083.63308 +22.01450 0.10281 0.921371 0.374841 M2 323.36258 -00.82325 0.802345 -0.596687 -0.0143679 M3 205.54842 +28.37728 -0.793808 -0.379451 0.475275 M4 245.89675 -26.52575 -0.365393 -0.816723 -0.4466
#include <sli/stdstreamio.h>
#include <sli/fitscc.h>
using namespace sli;
int main( int argc, char *argv[] )
{
int return_status = -1;
stdstreamio sio; /* standard I/O */
fitscc fits; /* FITS object */
/* reading a FITS file */
if ( 1 < argc ) {
long i, j, npix;
double sum;
const char *in_file = argv[1];
if ( fits.read_stream(in_file) < 0 ) {
sio.eprintf("[ERROR] fits.read_stream(\"%s\") failed\n",in_file);
goto quit;
}
fits_image &prim = fits.image("Primary");
prim.convert_type(FITS::FLOAT_T);
fits::float_t *const *ptr_2d;
ptr_2d = prim.float_t_ptr_2d(true);
sum = 0;
npix = 0;
for ( i=0 ; i < prim.row_length() ; i++ ) {
for ( j=0 ; j < prim.col_length() ; j++ ) {
double v = ptr_2d[i][j];
if ( isfinite(v) ) {
sum += v;
npix ++;
}
}
}
sio.printf("mean = %g\n", sum/npix);
}
return_status = 0;
quit:
return return_status;
}
実行結果:
mean = 962.69
#include <sli/stdstreamio.h>
#include <sli/fitscc.h>
#include <sli/mdarray_statistics.h>
using namespace sli;
int main( int argc, char *argv[] )
{
int return_status = -1;
stdstreamio sio; /* standard I/O */
fitscc fits; /* FITS object */
/* reading a FITS file */
if ( 1 < argc ) {
const char *in_file = argv[1];
if ( fits.read_stream(in_file) < 0 ) {
sio.eprintf("[ERROR] fits.read_stream(\"%s\") failed\n",in_file);
goto quit;
}
fits_image &prim = fits.image("Primary");
prim.convert_type(FITS::FLOAT_T);
mdarray_float &prim_arr = prim.float_array();
/* get mean, variance, skewness, kurtosis */
double stddev;
mdarray_double moment = md_moment(prim_arr,
false, NULL, &stddev);
sio.printf("ALL:\n");
sio.printf("mean = %g\n", moment[0]);
sio.printf("stddev = %g\n", stddev);
if ( 0 < prim.header_value_length("BIASSEC") ) {
const char *biassec = prim.header("BIASSEC").svalue();
/* get mean, variance, skewness, kurtosis */
mdarray_double moment = md_moment(prim_arr.sectionf(biassec),
false, NULL, &stddev);
sio.printf("OVERSCAN:\n");
sio.printf("mean = %g\n", moment[0]);
sio.printf("stddev = %g\n", stddev);
}
}
return_status = 0;
quit:
return return_status;
}
実行結果:
ALL: mean = 962.69 stddev = 1348.48 OVERSCAN: mean = 920.816 stddev = 5.93222