Я пытаюсь реализовать операции с плавающей точкой в микроконтроллере, и до сих пор у меня был большой успех.Умножение 23-битных типов данных в системе с длинными длинными
Проблема заключается в том, что я делаю умножение на моем компьютере, и она отлично работает:
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
Таким образом, вы можете видеть, что моя проблема в том, что микроконтроллер будет сгенерирована неопределенной refence к __muldi3
если я попробовать gig = mm1*mm2
есть.
И если я попробую с меньшими типами данных, он сохранит только младшие значащие биты, которые я не хочу. Мне нужны 23 мб бит продукта.
Есть ли у кого-нибудь идеи относительно того, как я могу это сделать?