atof (& ldquo; 0 & rdquo;) возвращает 2 в переменной с плавающей точкой

PyVmMonitor имеет живой просмотр, который может помочь вам там (вы можете подключиться к работающей программе и получить статистические данные из нее).

См.: http://www.pyvmmonitor.com /

-2
задан Clifford 18 January 2019 в 20:54
поделиться

2 ответа

Похоже, причина вашей проблемы в обновленном тексте вопроса:

ОБНОВЛЕНИЕ : этот фрагмент кода является частью гораздо большего проекта, и нет смысла в разработке проекта. У меня есть пользовательский Makefile с опцией LDFLAG

"-mfloat-abi=hard -mfpu=fpv4-sp-d16 -u _printf_float".

Предполагая, что эти параметры являются изменениями по сравнению со значениями по умолчанию, вы говорите компилятору сгенерировать код для другого ABI из экосистемы библиотеки вашего набора инструментов , Код, сгенерированный для main, ожидает результата atof в регистре с плавающей запятой, но atof использует стандартный ABI, который передает аргументы с плавающей запятой и возвращаемые значения в регистрах общего назначения. Таким образом, main просто читает все ненужное, оставленное в регистрах с плавающей запятой, используемых для возвращаемых значений.

Посмотрите, исчезнет ли ваша проблема, если вы удалите -mfloat-abi=hard. Если это так, вы, вероятно, нашли свою проблему. Вам нужно либо создать набор инструментов и библиотек для ABI на жестком диске, либо придерживаться принятого по умолчанию соглашения о вызовах не на жестком диске.

0
ответ дан R.. 18 January 2019 в 20:54
поделиться

Во-первых, в вашем вопросе отсутствует минимальный, полный и проверяемый пример .

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
    char test[] = "0";
    float val1;
    double val2;

    val1 = atof(test);
    printf("%f\n", val1);

    val2 = atof(test);
    printf("%f\n", val2);
}

Вывод:

0.000000
0.000000

< °))) < ()

Или ваша стандартная реализация библиотеки - fubar.

0
ответ дан Swordfish 18 January 2019 в 20:54
поделиться
Другие вопросы по тегам:

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