Может ли кто-нибудь прислать мне код c для разделения 2 64-битных чисел. Мой компилятор поддерживает только деление 32/32.
Спасибо и с уважением
Мани
Может ли кто-нибудь прислать мне код c для разделения 2 64-битных чисел. Мой компилятор поддерживает только деление 32/32.
Спасибо и с уважением
Мани
Вы уверены, что ваш компилятор не поддерживает 64-битное деление? Если ваш компилятор C поддерживает C99, это должно работать:
#include <stdint.h>
#include <stdio.h>
int main(void)
{
int64_t numerator = 123;
int64_t denominator = 10;
int64_t quotient = numerator / denominator
printf("%" PRId64 " / %" PRId64 " = %" PRId64 "\n",
numerator, denominator, quotient);
return 0;
}
Код доступен для Linux, см. div64.c. Вы можете это скопировать?
Более общая идея заключается в использовании библиотеки множественной точности, такой как GMP.
GMP — это бесплатная библиотека для арифметики произвольной точности, работающая с целыми числами со знаком, рациональными числами и числами с плавающей запятой. Нет никаких практических ограничений для точности, кроме тех, которые подразумеваются доступной памятью в машине, на которой работает GMP. GMP имеет богатый набор функций, а функции имеют обычный интерфейс.
Деление с плавающей запятой обрабатывается с помощью void mpf_div (mpf_t rop, mpf_t op1, mpf_t op2)
Более чем вероятно, что ограничение деления связано с тем, что вы компилируете для 32-битной системы, а не для 64-битной.
Я не помню, чтобы видел инструкцию целочисленного деления, которая обрабатывает 64-битную для x86. Он будет умножать 2 32-битных целых числа и разделять результаты на 2 регистра, но не деление, насколько я помню.
divq
.
- person Crashworks; 17.08.2009
Поиск в другом месте ядра Linux: udivdi3.c< /а>
Это должно быть точным обеспечением функций, используемых GCC всякий раз, когда он сталкивается с 64-битным делением.