asin

asinは、逆正弦値を計算する。

Man page of ASIN
C言語関数辞典 - C言語Tips集 アークサイン(逆正弦)を計算する

つまり、sinの値から、角度のラジアン値を計算するということ。

asinに0を渡せば、0になるのは、角度が0°、つまり0(rad)の時。
asinに1を渡せば、1になるのは、角度が90°、つまり1.570796(rad)の時。
あとは、val_30、val_45、val_60を渡せば、その時のラジアン値が求められる。

$ vi asin.c
$ gcc -lm asin.c -o asin
$ ./asin
rad_0 = 0.000000
rad_30 = 0.523599
rad_45 = 0.785398
rad_60 = 1.047198
rad_90 = 1.570796

val_30 = 0.500000
val_45 = 0.707107
val_60 = 0.866025

asin(0) = 0.000000
asin(val_30) = 0.523599
asin(val_45) = 0.785398
asin(val_60) = 1.047198
asin(1) = 1.570796
$

asinの値が、最初のラジアン値と一致している。

Sample/c/asin/asin/src/asin at master · bg1bgst333/Sample · GitHub

tan

tanは、正接値を計算する。

Man page of TAN
C言語関数辞典 - C言語Tips集 タンジェント(正接)を計算する

tan30°は1 / √3、tan45°は1、tan60°は√3となる。


$ vi tan.c
$ gcc -lm tan.c -o tan
$ ./tan
rad_0 = 0.000000
rad_30 = 0.523599
rad_45 = 0.785398
rad_60 = 1.047198
rad_90 = 1.570796

val_30 = 0.577350
val_45 = 1.000000
val_60 = 1.732051

tan(0(deg)) = 0.000000
tan(30(deg)) = 0.577350
tan(45(deg)) = 1.000000
tan(60(deg)) = 1.732051
tan(90(deg)) = 16331239353195370.000000
$

tan90°は、本来+∞になるので、上のように出すのは誤り。

Sample/c/tan/tan/src/tan at master · bg1bgst333/Sample · GitHub

cos

cosは、余弦値を計算する。

Man page of COS
C言語関数辞典 - cos, cosf, cosl

cos30°は√3 / 2、cos45°は1 / √2、sin60°は1 / 2、とsinとは逆になる。

cos0°が1、cos90°は0。

$ vi cos.c
$ gcc -lm cos.c -o cos
$ ./cos
rad_0 = 0.000000
rad_30 = 0.523599
rad_45 = 0.785398
rad_60 = 1.047198
rad_90 = 1.570796

val_30 = 0.866025
val_45 = 0.707107
val_60 = 0.500000

cos(0(deg)) = 1.000000
cos(30(deg)) = 0.866025
cos(45(deg)) = 0.707107
cos(60(deg)) = 0.500000
cos(90(deg)) = 0.000000
$

このようになる。

Sample/c/cos/cos/src/cos at master · bg1bgst333/Sample · GitHub

sin

sinは、正弦値を計算する。

Man page of SIN
C言語関数辞典 - sin, sinf, sinl

引数はラジアン単位で取るので、角度をラジアン単位に変換しないといけない。角度にπ / 180を掛けるとラジアンになる。
また、sin30°は1 / 2、sin45°は1 / √2、sin60°は√3 / 2、になることがわかっているので、その値もあらかじめ計算しておく。

sinの値が、0、1、またはあらかじめ出しておいた値になるか試す。

$ vi sin.c
$ gcc -lm sin.c -o sin
$ ./sin
rad_0 = 0.000000
rad_30 = 0.523599
rad_45 = 0.785398
rad_60 = 1.047198
rad_90 = 1.570796

val_30 = 0.500000
val_45 = 0.707107
val_60 = 0.866025

sin(0(deg)) = 0.000000
sin(30(deg)) = 0.500000
sin(45(deg)) = 0.707107
sin(60(deg)) = 0.866025
sin(90(deg)) = 1.000000
$

このように、sin30°、sin45°、sin60°も、あらかじめ計算しておいた値になる。

Sample/c/sin/sin/src/sin at master · bg1bgst333/Sample · GitHub

M_PI(Windows)

M_PIをWindowsで使う場合は、ひと手間要る。

Visual C++で円周率のM_PIを使う | 手っ取り早く教えて

Win32 コンソール アプリケーション
Win32 コンソール アプリケーション

Win32 コンソール アプリケーションで、プロジェクト作成。

M_PI.cを追加
M_PI.cを追加

M_PI.cを追加し、

/* ヘッダファイルのインクルード */
#include <stdio.h>	/* 標準入出力 */
#include <math.h>	/* 数学関数 */

/* main関数の定義 */
int main(void){

	/* 円周率π */
	printf("M_PI = %f\n", M_PI);	/* 円周率πの値はM_PIに定義されている. */

	/* プログラムの終了 */
	return 0;	/* 0を返して正常終了. */

}

とすると、

ビルドエラー
ビルドエラー

ビルドエラーとなるので、

_USE_MATH_DEFINESマクロを追加する。
こうすると、

ビルドが通る
ビルドが通る

ビルドが通るので、実行すると、

M_PI = 3.141593
続行するには何かキーを押してください . . .

このように出力される。

Sample/c/M_PI/M_PI_Windows/src/M_PI at master · bg1bgst333/Sample · GitHub

M_PI

円周率πの値は、math.hにM_PIとして定義されている。

man page M_PI section 3
円周率 M_PI と math.h

小数点以下を指定しないデフォルトの%fだと、

$ vi M_PI.c
$ gcc -lm M_PI.c -o M_PI
$ ./M_PI
M_PI = 3.141593
$

せいぜいこんな精度。小数点以下の桁数を指定すればもっと精度高くなる。

C言語(標準)にM_PIは無い - 簡潔なQ

ただし、M_PIは非標準である。

Sample/c/M_PI/M_PI/src/M_PI at master · bg1bgst333/Sample · GitHub

令和最初のご挨拶

あけましておめでとうございます
令和もよろしくお願いいたします。
さて、GWも半分を過ぎ、ここから折り返しです。
新時代、何していこうか、書きだしていきましょうか。

Sample

どうしてもこれが主軸になってしまってるからなあ・・・。

C言語

平成のうちに数稼ぎに使ったとはいえ、文字列、数学関数で比較的簡単にブログ借金返せた。苦しい時はここ中心になりそう。C89埋まったらC99使うけどどうだろ。

C++

basic_istream続きかな。あとはstd::stringとかSTLC++1x、C++2xはちょこちょこできるかどうか。

UNIXシステムコール

たぶんない

WindowsAPI

GDIの残り、リージョン、プリンタ、深いとこ

MFC

DocumentViewの続き

ATL

全然やってない

COM

使う方、ピクチャ、ストリーム、シェル、ブラウザ

C#

readonlyとかis,as,typeofとか短い抜けてるのがある。
まとまった時間要る。あーTask。

.NET

コレクション、あとはWinForms残り

Java

ウィンドウィングの途中、UIとグラフィックスか。

WPF

本必須

Android

MVVMができたのでWPFを経由してここに戻れるかも。それまで借金分をまずは上げるか、未プッシュテーマも若干ある。

その他

JavaScript、新言語系かな。
OSSライブラリもやりたくなってきてる。昔、Windowsではやってたやつ。いまlibjpegしかないしなあ。
直近ではない過去分のブログ投稿もしていかないといけないので大変。
あーカーネルドライバもあった。

Application

こっちに手を付けられないでいる・・・。

OneLang32

早くprintf("Hello, world\n")のパースやりたいのだが、いまSampleに偏っている。

VizCommand32

ちょっとした機能なら載せられるけど・・・。まずはスペース対応か。

ObjeqtNote32

こっちもいろんなファイルをやりたいが。まずエディタとして基本機能。

ZincA

これが完全に止まってしまって。ただのAndroidブラウザだし。0.3系に移らざるを得ない。

Xaoria32

コミケに向けて複数ステージ。

Haiiro32

まったく白紙。絵描きたい。

その他

スマホゲームもちょっとは考えないと。ただDirectXとか残したままにしたくないので厳しい。あーあと、foo1000とB.G-STATIONをどうするかってのもあったな。

他にもいろいろとやらないといけないことが多いので、新時代も大変だなあ・・・。