Поиск типов данных с одинаковой точностью в нескольких языках программирования, например C / C ++, D, Go

Я пытаюсь реализовать программу с числами с плавающей запятой, используя два или более языков программирования. Программа говорит 50 000 итераций, чтобы в конечном итоге привести ошибку к очень маленькому значению.

Чтобы обеспечить сопоставимость моих результатов, я хотел убедиться, что я использую типы данных с одинаковой точностью на разных языках. Скажите, пожалуйста, существует ли соответствие между float / double в C / C ++ и в D и Go. Я ожидаю, что C / C ++ и D будут достаточно близки в этом отношении, но не уверен. Большое спасибо.

0

Решение

Как правило, для скомпилированных языков формат с плавающей запятой и точность сводятся к двум вещам:

  1. Библиотека, используемая для реализации функций с плавающей запятой, которые непосредственно не поддерживаются аппаратно.
  2. Оборудование, на котором работает система.

Это также может зависеть от того, какие опции компилятора вы предоставляете (и насколько сложен компилятор в целом) — многие современные процессоры имеют векторные инструкции, и результат может быть несколько иным, чем если бы вы использовали «обычные» инструкции с плавающей запятой (например, FPU или SSE на процессорах x86). Иногда вы также можете увидеть различия, потому что внутренние вычисления на x86 FPU являются 80-битными и хранятся как 64-битные по завершении вычислений.

Но в целом, учитывая одинаковое оборудование и схожий тип компиляторов, я ожидаю получить один и тот же результат [и примерно одинаковую производительность] от двух разных [достаточно похожих] языков.

Большинство языков имеют либо только «двойной» (обычно 64-разрядный), либо «одинарный и двойной» (например, с плавающей запятой — обычно 32-разрядный и двойной — обычно 64-разрядный в C / C ++ — и, вероятно, также D, но я не то, что в D).

2

Другие решения

В Go типы с плавающей запятой соответствуют стандарту IEEE-754.

Прямо из спецификации (http://golang.org/ref/spec#Numeric_types)

float32     the set of all IEEE-754 32-bit floating-point numbers
float64     the set of all IEEE-754 64-bit floating-point numbers

Я не знаком с D, но эта страница может быть интересна: http://dlang.org/float.html.

Для C / C ++ стандарт не требует IEEE-754, но в C ++ вы можете использовать is_iec559() чтобы проверить, использует ли ваш компилятор IEEE-754. Смотрите этот вопрос: Как проверить, использует ли компилятор C ++ стандарт IEEE 754 с плавающей запятой

2

По вопросам рекламы [email protected]