У меня есть показатели в представленном формате: "1.45e004" или "1.45e-04" или "-1.45e004".
[обратите внимание на знак минус в третьем]
Проверка (==, !=, >, ‹, ‹=, >= и т. д.) не работает с показателями степени [неверные результаты или результаты не возвращаются] в их текущем формате.
Однако преобразование экспоненты с помощью fabs работает для первых двух, но не для последнего, поскольку fabs удаляет знак минус (следовательно, значение становится положительным, а не отрицательным, как должно быть).
Мои вопросы таковы:
1) Есть ли способ преобразовать экспоненты в абсолютные значения, которые включали бы значения со знаком?
[фабрики не могут этого сделать]
OR
2) Есть ли способ [или функция(и)] для сравнения одного показателя степени с другим (должна быть возможность делать ==, !=, >, ‹, >=, ‹=)?
OR
3) Есть ли способ извлечь два значения из экспоненты.
Например: "-1.45e-04" [Value1 = -1.45, Value2 = -4].
Ответы на вопросы 1 и/или 2 предпочтительнее, так как 3 — это обходной путь, который может иметь проблемы с реализацией (однако он есть в случае 1 и 2, не нет подходящих ответов).
[Примечание: можно использовать методы С++, хотя предпочтительнее избегать потока]
Спасибо
int main(void)
{
//Not the actual program, but simple enough
char Arr[100];
double T1, T2;
sprintf(Arr,"-1.45e004");
T1 = atof(Arr);
printf("%f\n",fabs(T1)); //Fails to show the minus sign
return 0;
}
Общая цель может быть достигнута при ответе на любой из трех вопросов:
Либо: 1) Прямое сравнение (с использованием функции) между двумя показателями в заданном формате, чтобы увидеть, являются ли они одинаковыми, не одинаковыми, больше, меньше (и т. д.) для сортировки от наибольшего показателя к наименьшему показателю (не содержится в программе, так как то, как реализована сортировка, не имеет значения: нужно решить только проверку).
2) Косвенное сравнение, путем преобразования его в другой тип, который можно сравнивать напрямую.
3) Прямое сравнение с использованием неудобного обходного пути путем отдельного сравнения двух чисел в показателе степени.
[Подробности фона]
Фактическая программа охватывает 7 файлов заголовков и 1 файл cpp, поэтому я не могу отобразить конкретный сегмент, поскольку он переплетается.
Задача такова: файлы, загруженные со спутника ACE, разбираются как аргументы, загружаются в память, преобразуются в соответствующие им типы. Затем сохраненные типы сортируются и подготавливаются (текущий этап) для отображения графа (еще не реализовано).
На данный момент я имею дело с экспонентами (хранящимися в текстовых файлах спутника ACE в формате, указанном выше). Эти показатели необходимо просмотреть, чтобы найти наибольший показатель и наименьший показатель, чтобы можно было правильно расположить график между ними. После этого каждый показатель степени будет сравниваться, чтобы увидеть, больше ли он (выше на графике) или меньше (ниже на графике) заданного набора чисел.
Для этой задачи мне нужны сравнения между показателями. Учитывая, что я неопытен с ними, я решил спросить здесь.
fabs
. В любом случае, если вы хотите получить помощь, я предлагаю вам опубликовать код и четко объяснить, что именно в этом коде работает не так, как вы ожидаете. - person NPE   schedule 13.04.2011-1.45e-04
— это число с плавающей запятой, представленное значащим (или мантиссом), в примере-1.45
и показатель степени, в примере-04
. Итак, когда вы говорите, что хотите преобразовать/сравнить показатели степени, вы действительно имеете в виду показатели степени или вы на самом деле имеете в виду целые числа? - person Björn Pollex   schedule 13.04.2011