@forgoty

Почему условие if ( a == a) может не выполняться для Embedded-разработки?

Ходил на собеседование на позицию Embedded C Developer. На собеседовании спросили:

Почему, какое и при каких условиях не будет выполнятся if statement?
int a;
float b;

int main(){
    if (a == a){
        ...
        (some code)
        ...
    }

    if (b == b){
        ...
        (some code)
        ...
    }


Меня это сразу удивило. Я ответил, что никто бы так писать не стал. Однако, предложили подумать. Я начал рассуждать на тему прерываний. Что оно могло возникнуть и изменить переменные во время сравнения. Но мне так и не ответили почему, а просто промолчали. Подскажите, пожалуйста, ответить на этот вопрос хотя бы уже для себя. Просто интересно.
  • Вопрос задан
  • 632 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
float b;
...
if (b == b)

Не выполняется тогда и только тогда, когда в b -- NaN.

Обоснование есть в стандарте: пункт стандарта C99 6.2.6.1:4 говорит:
Two values (other
than NaNs) with the same object representation compare equal, but values that compare
equal may have different object representations.
.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
CityCat4
@CityCat4 Куратор тега C
//COPY01 EXEC PGM=IEBGENER
Ну, я бы сказал, что не выполнится (b == b) потому что формат хранения float таков, что точного сравнения провести невозможно. Число с плавающей точкой есть математическая абстракция, для реализации которой в вычислительной технике (которая оперирует конкретными нулями и единицами) применяется ряд допущений ;)
Ответ написан
SagePtr
@SagePtr
Еда - это святое
Вообще компилятор всё это вырежет к чертям, потому что не было задано ключевое слово volatile
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы