#!/usr/bin/env python
# coding: utf-8

# # Chapter 5: Numbers & Bits (Review Questions)

# The questions below assume that you have read the [first <img height="12" style="display: inline-block" src="../static/link/to_nb.png">](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/develop/05_numbers/00_content.ipynb), [second <img height="12" style="display: inline-block" src="../static/link/to_nb.png">](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/develop/05_numbers/01_content.ipynb), and the [third <img height="12" style="display: inline-block" src="../static/link/to_nb.png">](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/develop/05_numbers/02_content.ipynb) part of Chapter 5. Some questions regard the [Appendix <img height="12" style="display: inline-block" src="../static/link/to_nb.png">](https://nbviewer.jupyter.org/github/webartifex/intro-to-python/blob/develop/05_numbers/03_appendix.ipynb); that is indicated with a **\***.
# 
# Be concise in your answers! Most questions can be answered in *one* sentence.

# ## Essay Questions 

# Answer the following questions briefly with *at most* 300 characters per question!

# **Q1**: In what way is the **binary representation** of `int` objects *similar* to the **decimal system** taught in elementary school?

#  < your answer >

# **Q2**: Why may objects of type `bool` be regarded a **numeric type** as well?

#  < your answer >

# **Q3**: Colors are commonly expressed in the **hexadecimal system** in websites (cf., the [HTML <img height="12" style="display: inline-block" src="../static/link/to_wiki.png">](https://en.wikipedia.org/wiki/HTML) and [CSS <img height="12" style="display: inline-block" src="../static/link/to_wiki.png">](https://en.wikipedia.org/wiki/Cascading_Style_Sheets) formats).
# 
# For example, $#000000$, $#ff9900$, and $#ffffff$ turn out to be black, orange, and white. The six digits are read in *pairs of two* from left to right, and the *three pairs* correspond to the proportions of red, green, and blue mixed together. They reach from $0_{16} = 0_{10}$ for $0$% to $\text{ff}_{16} = 255_{10}$ for $100$% (cf., this [article <img height="12" style="display: inline-block" src="../static/link/to_wiki.png">](https://en.wikipedia.org/wiki/RGB_color_model) for an in-depth discussion).
# 
# In percent, what are the proportions of red, green, and blue that make up orange? Calculate the three percentages separately! How many **bytes** are needed to encode a color? How many **bits** are that?

#  < your answer >

# **Q4**: What does it mean for a code fragment to **fail silently**?

#  < your answer >

# **Q5**: Explain why the mathematical set of all real numbers $\mathbb{R}$ can only be **approximated** by floating-point numbers on a computer!

#  < your answer >

# **Q6**: How do we deal with a `float` object's imprecision if we need to **check for equality**?

#  < your answer >

# **Q7**: What data type, built-in or from the [standard library <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/index.html), is best suited to represent the [transcendental numbers <img height="12" style="display: inline-block" src="../static/link/to_wiki.png">](https://en.wikipedia.org/wiki/Transcendental_number) $\pi$ and $\text{e}$?

#  < your answer >

# **Q8**: How can **abstract base classes**, for example, as defined in the **numerical tower**, be helpful in enabling **duck typing**?

#  < your answer >

# ## True / False Questions

# Motivate your answer with *one short* sentence!

# **Q9**: The precision of `int` objects depends on how we choose to represent them in memory. For example, using a **hexadecimal representation** gives us $16^8$ digits whereas with a **binary representation** an `int` object can have *at most* $2^8$ digits.

#  < your answer >

# **Q10**: With the built-in [round() <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/functions.html#round) function, we obtain a *precise* representation for any `float` object if we can live with *less than* $15$ digits of precision.

#  < your answer >

# **Q11**: As most currencies operate with $2$ or $3$ decimals (e.g., EUR $9.99$), the `float` type's limitation of *at most* $15$ digits is *not* a problem in practice.

#  < your answer >

# **Q12**: The [IEEE 754 <img height="12" style="display: inline-block" src="../static/link/to_wiki.png">](https://en.wikipedia.org/wiki/IEEE_754) standard's **special values** provide no benefit in practice as we could always use a **[sentinel <img height="12" style="display: inline-block" src="../static/link/to_wiki.png">](https://en.wikipedia.org/wiki/Sentinel_value)** value (i.e., a "dummy"). For example, instead of `nan`, we can always use `0` to indicate a *missing* value.

#  < your answer >

# **Q13**: The following code fragment raises an `InvalidOperation` exception. That is an example of code **failing loudly**.
# ```python
# float("inf") + float("-inf")
# ```

#  < your answer >

# **Q14**: Python provides a `scientific` type (e.g., `1.23e4`) that is useful mainly to model problems in the domains of physics or astrophysics.

#  < your answer >

# **Q15**: From a practitioner's point of view, the built-in [format() <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/functions.html#format) function does the *same* as the built-in [round() <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/functions.html#round) function.

#  < your answer >

# **Q16\***: The `Decimal` type from the [decimal <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/decimal.html) module in the [standard library <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/index.html) allows us to model the set of the real numbers $\mathbb{R}$ *precisely*.

#  < your answer >

# **Q17\***: The `Fraction` type from the [fractions <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/fractions.html) module in the [standard library <img height="12" style="display: inline-block" src="../static/link/to_py.png">](https://docs.python.org/3/library/index.html) allows us to model the set of the rational numbers $\mathbb{Q}$ *precisely*.

#  < your answer >