単精度浮動小数点数への変換
123
2進数に変換
0b1111011
単精度浮動小数点数形式に正規化
0b1.111011 x 2^(6)
単精度浮動小数点数データ構造に変換
- 符号部: 0
- 指数部: 6 + 127 = 134
- 仮引数部: 11101100000000000000000
Swiftによる確認
let f = 123 as Float print("符号: ", f.sign) print("指数: ", f.exponent) print("指数部: ", f.exponentBitPattern) print("仮引数部: ", String(f.significandBitPattern, radix:2)); /* 符号: plus 指数: 6 指数部: 133 仮引数部: 11101100000000000000000 */
123.625
2進数に変換する
0b1111011.101
単精度浮動小数点数形式に正規化
0b1.111011101 x 2(^6)
単精度浮動小数点数データ構造に変換
- 符号部: 0
- 指数部: 6 + 127 = 134
- 仮引数部: 111011101
Swiftによる確認
let f = 123.625 as Float print("符号: ", f.sign) print("指数: ", f.exponent) print("指数部: ", f.exponentBitPattern) print("仮引数部: ", String(f.significandBitPattern, radix:2)); /* 符号: plus 指数: 6 指数部: 133 仮引数部: 11101110100000000000000 */
123_456_789
仮引数部が23桁を超えるので、丸め誤差が発生する
2進数に変換
0b111010110111100110100010101
単精度浮動小数点数形式に正規化
0b1.11010110111100110100010(101) x 2^(26)
単精度浮動小数点数データ構造に変換
- 符号部: 0
- 指数部: 26 + 127 = 153
- 仮引数部: 11010110111100110100011 // 桁上り
Swiftによる確認
let f = 123_456_789 as Float print("符号: ", f.sign) print("指数: ", f.exponent) print("指数部: ", f.exponentBitPattern) print("仮引数部: ", String(f.significandBitPattern, radix:2)); /* 符号: plus 指数: 26 指数部: 153 仮引数部: 11010110111100110100011 */
0.1
仮引数部が23桁を超えるので、丸め誤差が発生する
2進数に変換
0b0.0001100110011001101
単精度浮動小数点数形式に正規化
0b1.100110011001101 x 2^(-4)
単精度浮動小数点数データ構造に変換
- 符号部: 0
- 指数部: -4 + 127 = 123
- 仮引数部: 100110011001101
Swiftによる確認
let f = 0.1 as Float print("符号: ", f.sign) print("指数: ", f.exponent) print("指数部: ", f.exponentBitPattern) print("仮引数部: ", String(f.significandBitPattern, radix:2)); /* 符号: plus 指数: -4 指数部: 123 仮引数部: 10011001100110011001101 */