Jump to content
СофтФорум - всё о компьютерах и не только

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


 Share

Recommended Posts

ос 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

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

Link to comment
Share on other sites

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

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

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

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

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

Edited by Teddy_Bear
Link to comment
Share on other sites

В 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

 

 

Link to comment
Share on other sites

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

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

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

 

Edited by Teddy_Bear
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...