Является ли long double полезным в ANSI C? - PullRequest
1 голос
/ 25 марта 2012

В стандарте C89 (ANSI C) существует тип данных, называемый long double, но нет математической функции для поддержки long double (<math.h>).Например, функция sin принимает аргумент long.

C99 поддерживает математические функции для long double.

Мой вопрос: когда нет математических функций для поддержки long double в ANSI C, long double полезно?

Ответы [ 2 ]

0 голосов
/ 24 марта 2013

То, что math.h не поддерживает что-то, не означает, что вы не можете сделать это сами.

Существующий тип - это хорошо, потому что это означает, что существует кроссплатформенный способ запрашивать что-то с большей или равной точностью для long. Этого нельзя было бы сделать, если бы его не было на каком-либо языке (лучше всего было бы взломать что-нибудь вместе со структурой или массивом длинных / двойных чисел).

Функции только для удобства; иногда можно использовать встроенную функцию процессора sin, но иногда нет, и вместо этого функция sin просто содержит алгоритм для получения ответа или его поиска с использованием стандартных операций.

Вы можете скопировать функции sinl для вашей целевой платформы с C99 на C89, если хотите. Здесь большой список реализаций: http://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/ieee754;hb=HEAD

Или просто придерживайтесь C99.

0 голосов
/ 25 марта 2012

Да, "long double" абсолютно полезен, если вы хотите вычислить выражение с более чем двойной точностью.

Интересный дополнительный вопрос: "Что именно IS 'long double""?

Ответ зависит от платформы и / или компилятора:

http://en.wikipedia.org/wiki/Long_double

...