単精度浮動小数点数への変換

123

  1. 2進数に変換

    0b1111011

  2. 単精度浮動小数点数形式に正規化

    0b1.111011 x 2^(6)

  3. 単精度浮動小数点数データ構造に変換

    • 符号部: 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

  1. 2進数に変換する

    0b1111011.101

  2. 単精度浮動小数点数形式に正規化

    0b1.111011101 x 2(^6)

  3. 単精度浮動小数点数データ構造に変換

    • 符号部: 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桁を超えるので、丸め誤差が発生する

  1. 2進数に変換

    0b111010110111100110100010101

  2. 単精度浮動小数点数形式に正規化

    0b1.11010110111100110100010(101) x 2^(26)

  3. 単精度浮動小数点数データ構造に変換

    • 符号部: 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桁を超えるので、丸め誤差が発生する

  1. 2進数に変換

    0b0.0001100110011001101

  2. 単精度浮動小数点数形式に正規化

    0b1.100110011001101 x 2^(-4)

  3. 単精度浮動小数点数データ構造に変換

    • 符号部: 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

*/