Что означает данная запись на c++ : #define FLT_EPSILON 1.19209290E-07F

248
05 апреля 2019, 19:40

Сама запись:

#define FLT_EPSILON         1.19209290E-07F

Что такое

#define

и имя я знаю, но что значит 1.19209290E-07F нет. Объясните, пожалуйста.

Answer 1
#define FLT_EPSILON         1.19209290E-07F

это наследие си. На данный момент лучше писать так

const float FLT_EPSILON = 1.19209290E-07F;

В большинстве случаев эти записи эквивалентны по функционалу.

#define - это директива препроцессора, которая просто обозначает замену одного куска текста на другой. Препроцессор работает ещё до компилятора (хотя сейчас это происходит почти одним процессов) и иногда может давать чудесные результаты. К примеру, мой любимый

#define true false

и все вхождения true как слова будут заменены на false (bool a = true; будет заменено на bool a = false;, но true1 не будет.)

У define есть одна особенность - они ничего не знают о областях видимости и работают от места объявления и до конца файла. Именно поэтому, очень интересно наблюдать, как windows.h подменяет max/min и вызывает ошибки.

Хотя define и страшные, и ошибок много дают, но иногда они позволяют элегантно и красиво решить проблемы.

Буковка F в конце - это просто литерал. Такой себе способ уточнить тип переменной (ведь по умолчанию 1.0 - это double). В новом с++ появилась возможность создавать свои собственные литералы.

Answer 2

1.19209290E-07 - это число с плавающей точкой (1.19209290 * 10^-7), суффикс F в конце указывает, что число типа float

READ ALSO
Использование слотов/сигналов в Qt

Использование слотов/сигналов в Qt

Хочу научиться использовать слоты в Qt, но не могу нормально понять концепцию их созданияЯ читал книгу Макса Шлее, но я так и не понял, что...

142
Экспоненциальное число чтение с файла с++

Экспоненциальное число чтение с файла с++

как считать Экспоненициальную запись числа с файла ? ( подробнее желательно ) И в каком виде оно должно быть записано в файле?

184
Сравнение enum и string C++

Сравнение enum и string C++

Собсна, стоит задача: оформить функцию bool parseUrl(const string & url, Protocol & protocol, const unsigned int & port, const string & host, const string & document), которыая будет определять...

129