キャスト演算子 C/C++でキャスト演算子は必須である、しかし数字があふれるなどトラブルの元でもある。 整数(int)は階段状の可算(可付番)集合であり、実数(float)はスロープ状の非加算(非可付番)集合である。
可算(可付番)集合とは、階段を1段2段3段と数えて上がれるような数値並びで、自然数、整数、有理数(分数)がある。
非加算(非可付番)集合はスロープ状の数値並びで、階段を数えて登るようなことが出来ない、実数、複素数がある。
数学では実数は(対角線論法により)隙間の全くない密な物とされるが、CPUではビット列で表されるので厳密には、段差がある。
int ix;
float x;
ix=(int)x; はスロープ状の世界から、階段状の世界に数値を代入することで、打ち切り誤差を生ずる。 floatといえども有限のbit列から出来ているので、微少には段差がある。
doubleからfloatの代入では、双方ともに実数ではあるが、その表す大きさ(指数)と、表す桁数(仮数)に差がある、その段差を踏み外さないよう、注意が必要である。
可算無限集合…数値の並びに付番可能な集合、開始点とその次の数が明確な数値並び。
— ocart🎭音河円蔵(OngaEnzou) (@OneClickArt) February 6, 2022
例えば単純な自然数並びは開始点「1」で隣の数字は+=1…付番可能
偶数の自然数並び開始点「2」で隣の数字は+=2…付番可能
奇数の自然数並び開始点「1」で隣の数字は+=2…付番可能