Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Си проблема с printf (dev c++)


Рекомендуемые сообщения

ос win10х64 компилятор dev c++ (5.11)

#include <stdio.h>
 
int main(void)
{
    float a = 32000.0;
    double b = 2.14e9;
    long double c = 5.32e-05;
 
    printf("%f - %e\n", a, a);
    printf("%f - %e\n", b, b);
    printf("%Lf - %Le\n", c, c);
 
 	getchar();
  
    return 0;
}

вывод:

Цитата

32000.000000 - 3.200000e+004
2140000000.000000 - 2.140000e+009
0.000000 - 5.180409e-317

в чем может быть проблема?

Ссылка на комментарий
Поделиться на другие сайты

Это спасибо дяде Билли. В Винде лонг дабл и дабл совпадают!

https://msdn.microsoft.com/ru-ru/library/s3f49ktz.aspx

Происходит неявное преобразование типов. Причем с ошибкой. Баг это. Медицина бессильна.

Приведите лонг дабл к дабл и пользуйтесь ей спокойно.

Если совсем невмоготу, то велкам к пингвинам.

Изменено пользователем Teddy_Bear
Ссылка на комментарий
Поделиться на другие сайты

В 12.10.2016 в 21:41, Teddy_Bear сказал:

Это спасибо дяде Билли. В Винде лонг дабл и дабл совпадают!

https://msdn.microsoft.com/ru-ru/library/s3f49ktz.aspx

Происходит неявное преобразование типов. Причем с ошибкой. Баг это. Медицина бессильна.

Приведите лонг дабл к дабл и пользуйтесь ей спокойно.

Если совсем невмоготу, то велкам к пингвинам.

нашел решение.

 
Цитата

 

Сообщение от odip
Изучение проблемы показало что Windows считает что double == long double
В то время как mingw gcc считает что sizeof(long double) == 10.
Тем не менее обойти удалось
В mingw gcc есть собственная реализация printf().
Нужно указать что нужно использовать свой printf().

 

 
Для этого нужно прописать
#define __USE_MINGW_ANSI_STDIO 1

после чего вывод такой

Цитата

32000.000000 - 3.200000e+004
2140000000.000000 - 2.140000e+009
0.000053 - 5.320000e-005

 

 

Ссылка на комментарий
Поделиться на другие сайты

Всё правильно. Только пингвины любили дядю Билли. Своим программистам за мегабабло от M$ справиться не удалось.
MinGW (Minimalist GNU for Windows), программный порт GNU Compiler Collection (GCC) под Windows. GCC используется как стандартный компилятор для свободных UNIX-подобных операционных систем.

Только вот беда. Используя не родную для Сишарпа библиотеку MinGW можете напороться на неожиданное переопределение функций.

Как говорил Чак Йегер: Watch you six!

 

Изменено пользователем Teddy_Bear
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...