概要 §
float型の変数に1を足したのに、値が変わっていない! いったいどうして?
わざとオーバーフローさせて使う整数、移動する小数点、どこにもないのにあると仮定する1という数字、負数の時だけ1つ扱える数値が多い、常識を超えた挙動は全てビットに秘密があった!
目次
まえがき
なぜ無限ループしてしまうのか
サンプルソース
なぜ加算したのに値は増えないのか
なぜ10と計算させると値が狂うのか
バイナリー表現の秘密
2進数8進数10進数12進数16進数60進数
型名オールスター
限界を超えた加算の秘密
限界を超えた減算の秘密
check/uncheck文の秘密
sbyte型と符号ビットの秘密
足し算と引き算は同じと意識したコード例
なぜsbyte型の負数はConvert.ToStringメソッドで桁数が増えるのか
なぜ負数は表現できる数が1つ多いのか
short/ushort型とエンディアンの秘密
int/uint型でもトラブルは起きる
long/ulong型は万能ではない
Int128/UInt128という破格のスーパー型
nint/nuintはビット数が決まっていない
固定小数点と浮動小数点の違い
float型と浮動小数点の秘密
浮動小数点の期待を裏切る非正規化数の闇
double型とHalf型はビット数が異なる
decimal型と表現力の秘密
char型とstring型の秘密
AND/OR/XOR/シフトのビット演算子の秘密
列挙型とORの関係
最大値から最小値へ・数値のオーバーラップを利用した例
整数型の最小値と最大値が決まる理屈
まとめ・数値の理解と高速化のツボ
あとがき・ビットは続くよどこまでも