面積が等しいベン図を書く

親戚に質問されたので。

面積が等しいベン図と聞いて、2つのパターンが思い浮かぶ。

  1. 「Aのみ」と「Bのみ」と「AかつB」 の面積が等しい (3等分パターン)
  2. 「Aのみ+Bのみ」と「AかつB」の面積が等しい (2等分パターン)

これを作図すると、次のようになる。

パターン1 : 3等分パターン

f:id:minowith:20210924230405p:plain

パターン2 : 2等分パターン

f:id:minowith:20210924230423p:plain

続きを読む

意外に知らない %.2g の意味

C++20 で追加される(はずの) std::format のリファレンス実装 fmtlib/fmt を触ってて気づいたメモ。

浮動小数の小数点以下を2桁に抑えたい場合、例えば以下のように書くと思う。

#include <iostream>
#include <format>
#include <cstdio>

int main() {
    double d = 3.1415926535;

    ::printf("printf = %.2f", d); // "3.14"
    std::cout << std::format("format = {:.2}", d); // "3.14" ?

    return 0;
}

だが、これは以下の出力になる。

printf = 3.14
format = 3.1

実は std::format() で型指定をしない場合、浮動小数型では {:.2g} として扱われる。
この gprintf() にもあるオプションなので、指定してみたら出力が一致した。

double d = 3.1415926535;
::printf("printf = %.2g", d); // "3.1"
std::cout << std::format("format = {:.2}", d); // "3.1"
続きを読む

Cコンパイラ作りで心が折れそうになってるポイント

rui314 さんのブログを見て刺激されたので、3月末くらいからCコンパイラをのんびり作ってる。
低レイヤを知りたい人のためのCコンパイラ作成入門

ただ、最近は「ここ作りにくいな・・・」って思う点が出てきて、心が折れかかってるので、 自分の頭で悩んでる点について吐き出してみる。

続きを読む