# Data representation (part 3)

This lesson contains approximately 20 minutes of video content.

### Character representation

#### Activity: Floating point value computation from bit string

Activity Prompt:
##### Background

In this question, you will define `BinaryToDouble`, taking a single `std::string` value passed by const reference, and returning a `double`. The `std::string` will encode the floating point value in the same toy format as introduced in the lecture video, and your implementation of `BinaryToDouble` must return the floating point value it encodes. For example, the `std::string` below encodes the floating point value `3.5`:

```              Value (as char):        0    b    0    1    0    1    1    0    0
Index (in std::string): 0    1    2    3    4    5    6    7    8
Float Representation    -    -    Sign Exp. Exp. Man. Man. Man. Man.
```

##### Assignment Prompt

Your function must ensure the `std::string` passed to `BinaryToDouble` follows the format we specify, including the `"0b"` as the first two characters. The character in

• index 2 stores the sign bit,
• indices 3-4 store the exponent bits, and
• indices 5-8 store the mantissa bits.
Therefore, the characters in indices 2-8 must be either `'0'` or `'1'`. If the `std::string` fails to follow the format specified, your function must throw an `std::invalid_argument` exception. The exponent is encoded using a bias, so your final exponent must be calculated as an exponential `field - bias`, where `bias` is equal to `1`.

###### Functions to Implement
``````
double BinaryToDouble(std::string bit_string);
// BinaryToDouble(“0b0101100”) = 3.5
// BinaryToDouble(“0b0000000”) = 0.0
// BinaryToDouble(“0b1000000”) = -0.0
``````