すごくメモ帳

すごくほぼメモ帳ぐらいなブログ

C言語

frexp と ldexp で浮動小数点数を分数へ変換するアルゴリズム

倍精度浮動小数点数のおさらいから。 フォーマット 符号 指数部 仮数部 1 11 52 \[ val = (-1)^{s} \cdot (1 + f \cdot 2^{-52}) \cdot 2^{e - 1023} \] 例: 0.75 \[ 0.75 = (-1)^{0_{(2)}} \cdot (1 + 100000000000000000000000000000000000000000000000000…

Windows 10 で WSL を用いた C 言語の環境を構築する方法

概要 C 言語をコンパイルするために、コンパイラーが必要となる。 コンパイラーはgccやclangやbccというものがあるが、Windowsでは少し扱いにくい。 そのため、MinGW などをインストールして使うこともあるが、今回は WSL2 を用いた環境の構築方法を紹介する…

書いたことがあるプログラミング言語

書いたことがあるプログラミング言語を紹介する。 C言語 まず、C言語。 C言語は高校からやり始めたけど、大学の講義で本格的に始めて今ではよく書く言語ベスト3の言語。 Arduino(電子工作で使うマイコンボード)でもCライクな言語を使う。 ポインタとか構造体…

Rubyの拡張ライブラリー入門シリーズ③ (アクセサ: rb_define_attr)

アクセサを定義する アクセサとは アクセサとは、インスタンス変数に対して読み書きするものです。 def hoge @hoge end クラス内で上のように定義すると、インスタンス変数が示すものを読み込むことができます。 def hoge= val @hoge = val end とクラスで定…

Rubyの拡張ライブラリー入門シリーズ② (クラスの作成と定義と継承: rb_define_class, メソッドの定義: rb_define_method)

クラスを作る // hoge.c #include <stdio.h> #include <ruby.h> VALUE cHoge; static VALUE hoge_func(VALUE obj){ puts("Hello, world"); return Qtrue; } void Init_hoge(void){ cHoge = rb_define_class("Hoge", rb_cObject); rb_define_method(cHoge, "func", hoge_func, </ruby.h></stdio.h>…

Rubyの拡張ライブラリー入門シリーズ① (コンパイルしてHello, world)

Hello, world を書いてみる Hello, worldをC言語で書く // hoge.c #include <stdio.h> void Init_hoge(void){ puts("Hello, world!"); } extconf.rbを作る makefileを作るためにextconf.rbを作ります。 作ったら、実行してmake # extconf.rb require 'mkmf' create_ma</stdio.h>…

素数を計算するプログラム

#include <math.h> #include <stdio.h> #define N 10000000 int main(void){ static int array[N] = {}; int i, j, k = 0, l = 0, tmp, s, flag; for(i = 2; l <= N; i++){ flag = 1; j = 0; s = sqrt(i); while(tmp = array[j++]){ if(tmp > s) break; else if (i % tmp == 0</stdio.h></math.h>…