В C задает 2.0f так же, как 2.000000f?

Являются ли эти строки одинаковыми?

float a = 2.0f;

и

float a = 2.000000f;

Ответ 1

Да, это так. Независимо от того, какое представление вы используете, когда код компилируется, число будет преобразовано в уникальное двоичное представление. Существует только один способ представления 2 в стандарте IEEE 754 binary32, который используется на современных компьютерах для представления чисел float.

Ответ 2

Единственное, что должен сказать стандарт C99 в этом вопросе: (раздел 6.4.4.2):

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

Этот бит о "определяемом реализацией" означает, что технически реализация могла бы выбрать что-то другое в каждом случае. Хотя на практике ничего странного не произойдет для значения, такого как 2.

Важно помнить, что стандарты C не требуют IEEE-754.

Ответ 3

Да, они одинаковы.

Простая проверка: http://codepad.org/FOQsufB4

int main() {
printf("%d",2.0f == 2.000000f);
}

^ Будет вывод 1 (true)

Ответ 4

Да Конечно, это то же самое лишние нули справа игнорируются, просто нравится нули слева