64-битное деление - PullRequest
       94

64-битное деление

0 голосов
/ 14 декабря 2008

Может кто-нибудь отправить мне код c, чтобы разделить 2 64-битные числа. Мой компилятор поддерживает только деление 32/32.

Спасибо и С уважением

Мани

Ответы [ 5 ]

11 голосов
/ 14 декабря 2008

Вы уверены, что ваш компилятор не поддерживает 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;
}
6 голосов
/ 14 декабря 2008

Код доступен в Linux, см. div64.c . Вы можете скопировать это?

4 голосов
/ 14 декабря 2008

Более общая идея - использовать библиотеку с высокой точностью, например GMP .

GMP - это бесплатная библиотека для арифметики произвольной точности, работающая со целыми числами со знаком, рациональными числами и числами с плавающей запятой. Нет практического ограничения точности, кроме тех, которые подразумеваются в доступной памяти на машине, на которой работает GMP. GMP имеет богатый набор функций, а функции имеют обычный интерфейс.

Деление с плавающей запятой обрабатывается с помощью void mpf_div (mpf_t rop, mpf_t op1, mpf_t op2)

1 голос
/ 11 сентября 2009

Поиск в другом месте ядра Linux: udivdi3.c

Это должно быть точно, обеспечивает функции, используемые GCC, когда он сталкивается с 64-битным делением.

1 голос
/ 17 декабря 2008

Скорее всего, ограничение разделения связано с тем, что вы компилируете для 32-битных, а не 64-битных.

Я не помню, чтобы видел инструкцию целочисленного деления, которая обрабатывает 64 бит для x86. Он бы умножил 2 32-битных целых числа и разделил бы результаты на 2 регистра, но не делил, насколько я помню ..

...