Существует ли реализация операций IEEE-754 с открытым исходным кодом c/С++?

Я ищу ссылочную реализацию операций IEEE-754. Есть ли такая вещь?

Ответы

Ответ 1

Я считаю, что библиотеки C SoftFloat и fdlibm подходят для того, что вы ищете. Другие включают Linux (GNU libc, glibc) или * BSD libc математические функции. Наконец, CRlibm также должен вас заинтересовать.

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

Ответ 2

Я должен вас разочаровать: практически нет.

В то время как технически существуют системы, совместимые с IEEE-754, потому что они не реализуют необязательные функции, описанные в стандарте, ссылку реализация, позволяющая

  • доступ ко всем режимам округления
  • поддержка сигнализации NaNs
  • поддержка захвата всех пяти ловушек

не существует на стандартных языках. Это вызывает повторяющиеся беды Уильяма Кахана, главной силы стандарта и его адаптации на процессорах Intel.

Я не знаю, есть ли какие-то эзотерические языки, которые их поддерживают, но я могу исключить Java, С#, С++, Fortran.

EDIT: Несмотря на отсутствие поддержки компилятора, я советую Hausers SoftFloat реализация, данная mctylr. Хаузер знает, что он делает.

http://portal.acm.org/citation.cfm?id=227699.227701&coll=portal&dl=ACM&CFID=77938829&CFTOKEN=18578907

Ответ 3

Довольно запутанный вопрос; в С++ предполагается, что этот вид деталей позаботится об оборудовании или компиляторе. Таким образом, добавление с плавающей запятой С++ было бы

float a = 1.0;
float b = 2.0;
float c = a + b;

Я уверен, что это не то, что вы на самом деле имели в виду; возможно, вам пригодится эта страница, которая пытается эмулировать аппаратное обеспечение, совместимое с IEEE-754, в javascript?

Ответ 4

одна работа для вас может быть python. python имеет функцию, которая может конвертировать IEEE-754 32/64 бит точности HEX с плавающей точкой

   import struct
   struct.unpack('!f', '41973333'.decode('hex'))[0]

Вы можете либо написать приложение в python, либо просто создать функцию python и вызвать его в C/С++

Я не уверен, как вызвать python из C/С++, но это возможно. Вызов функций Python из С++