Причина - в точности вычисления. Двоичные данные с плавающей точкой - приблизительны. Я уже приводил выше пример. В случае BCD будут точные данные.
Маловероятно. Обычные целые в дополнительном коде обеспечат такую же точность плюс процентов на 20 займут меньше памяти, ну и арифметические операции будут быстрее. ИМХО, единственное преимущество BCD это быстрый вывод в десятичной форме очень длинных чисел.