80-битная арифметика с плавающей запятой в C / C ++ - PullRequest
1 голос
/ 10 августа 2011

Предположим, что b являются _int64 переменными. Необходимо вычислить sqrt((long double)a)*sqrt((long double)b) в 80-битной высокой точности с плавающей запятой.

Пример. (__int64)(sqrt((long double)a)*sqrt((long double)a) + 0.5) != a во многих случаях, как и должно быть.

Какой компилятор win32 C / C ++ может управлять 80-битной арифметикой с плавающей запятой?

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Возможно, вам не следует использовать число с плавающей запятой для получения квадратного корня из целого числа, особенно long double, которое плохо поддерживается и может иметь приблизительное (не точное) sqrtl в некоторых системах.Вместо этого ищите алгоритмы целочисленного квадратного корня.

2 голосов
/ 10 августа 2011

Вы уверены, что sqrt () подходит для длинных пар?

По крайней мере, в некоторых средах sqrt () для double, sqrtf () для float и sqrtl () для long double.

1 голос
/ 10 августа 2011

Embarcadero C ++ Builder будет обрабатывать 80-битные числа с плавающей запятой. Используйте тип long double или тип (импортированный из Delphi) Extounded. Они одинаковы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...