Почему эти два возвращаемых значения функции cbrt() различны?Strange cbrt() result on linux in C
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main() {
double nb = 56623104;
double v1 = cbrt(nb);
printf("v1 -> %.15f\n",v1);
double v2 = cbrt((double) 56623104);
printf("v2 -> %.15f\n",v2);
}
Компиляция:
НКУ toto.c -o тото -lm & & ./toto
Результат:
v1 -> 384.000000000000057
v2 -> 384.000000000000000
Поместите библиотеки ('-lm') за исходными или объектными файлами (' toto.c') для надежности. Что произойдет, если вы опустите опцию -lm? Он не должен связываться, но ... Вы посмотрели на ассемблер? Компилятор оценивает один из вызовов функций и оставляет его во время выполнения? –
Если вы используете любой уровень выбора (01, O2, O3 или Ofast), результат будет таким же. Я разобрал его, и я понимаю, почему он это делает. Теперь я пытаюсь объяснить, почему компилятор делает это. – Anty
Получаете ли вы такое же поведение с '#undef cbrt'? –