barja Posted October 12, 2016 Report Share Posted October 12, 2016 ос 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+0090.000000 - 5.180409e-317 в чем может быть проблема? Link to comment Share on other sites More sharing options...
Teddy_Bear Posted October 12, 2016 Report Share Posted October 12, 2016 (edited) Это спасибо дяде Билли. В Винде лонг дабл и дабл совпадают! https://msdn.microsoft.com/ru-ru/library/s3f49ktz.aspx Происходит неявное преобразование типов. Причем с ошибкой. Баг это. Медицина бессильна. Приведите лонг дабл к дабл и пользуйтесь ей спокойно. Если совсем невмоготу, то велкам к пингвинам. Edited October 12, 2016 by Teddy_Bear Link to comment Share on other sites More sharing options...
barja Posted October 14, 2016 Author Report Share Posted October 14, 2016 В 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 More sharing options...
Teddy_Bear Posted October 14, 2016 Report Share Posted October 14, 2016 (edited) Всё правильно. Только пингвины любили дядю Билли. Своим программистам за мегабабло от M$ справиться не удалось. MinGW (Minimalist GNU for Windows), программный порт GNU Compiler Collection (GCC) под Windows. GCC используется как стандартный компилятор для свободных UNIX-подобных операционных систем. Только вот беда. Используя не родную для Сишарпа библиотеку MinGW можете напороться на неожиданное переопределение функций. Как говорил Чак Йегер: Watch you six! Edited October 14, 2016 by Teddy_Bear Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now