Я пытаюсь реализовать операции с плавающей запятой в микроконтроллере, и пока у меня достаточно успеха.
Проблема заключается в способе умножения на моем компьютере, и он отлично работает:
unsigned long long gig,mm1,mm2;
unsigned long m,m1,m2;
mm1 = f1.float_parts.mantissa;
mm2 = f2.float_parts.mantissa;
m1 = f1.float_parts.mantissa;
m2 = f2.float_parts.mantissa;
gig = mm1*mm2; //this works fine I get all the bits I need since they are all long long, but won't work in the mcu
gig = m1*m2//this does not work, to be precise it gives only the 32 least significant bits , but works on the mcu
Итак, вы можете видеть, что моя проблема в том, что микроконтроллер сгенерирует неопределенный рефенс в __muldi3
, если я попробую gig = mm1*mm2
.
И если я попробую с меньшими типами данных, он сохранит только младшие биты, чего я не хочу. Мне нужны 23 битные биты продукта.
У кого-нибудь есть идеи относительно того, как я могу это сделать?