Ответ на часть А вопроса заключается в том, что вы не умножаете на правильное число. Поправочный коэффициент от «двоичного ГБ», или, точнее, ГиБ, до байтов не равен 1,048576. Это 1024 куба. Это 1 073 741 824.
46,8 x 1024 в кубах = 50,251,117,363.2 Остальное расхождение связано с ошибкой округления в 46,8. Похоже, это должно быть 46.813 ... что-то.
Вам нужен еще один коэффициент 1024 для каждого «шага» в шкале бинарных префиксов. Например, чтобы перейти от GiB к KiB или от MiB к B, нужно умножить на 1024 в квадрате, что составляет 1 048 576.
См. Статью в Википедии «Двоичный префикс», особенно таблицу внизу этого раздела: https://en.wikipedia.org/wiki/Binary_prefix#Adoption_by_IEC.2C_NIST_and_ISO.