2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Язык С, scanf и long double
Сообщение13.07.2018, 16:57 


16/10/14

667
Как с помощью функции scanf прочитать число типа long double в языке C ?
Содержательные попытки решения задачи:
Используется синтаксис C
scanf("%lf", &x);
считывает число типа double, но не long double. Кроме того проверены варианты: %Lf, %lF, %LF, %llf, %LLF - не помогают

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 17:05 
Заслуженный участник


27/04/09
28128
А что говорит документация?

-- Пт июл 13, 2018 19:10:00 --

Судя по всему, она говорит, что %Lf должно работать. Так что непонятно, почему у вас не сработало.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:06 
Заслуженный участник
Аватара пользователя


01/09/13
4744
SpiderHulk в сообщении #1326531 писал(а):
считывает число типа double, но не long double

а между ними есть разница?

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:11 
Заслуженный участник
Аватара пользователя


16/07/14
9416
Цюрих
Geen в сообщении #1326543 писал(а):
а между ними есть разница?
Да, double обычно 64-битный, а long double - 80-битный.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:14 
Заслуженный участник
Аватара пользователя


01/09/13
4744
mihaild в сообщении #1326547 писал(а):
Geen в сообщении #1326543 писал(а):
а между ними есть разница?
Да, double обычно 64-битный, а long double - 80-битный.

Не обязательно.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:17 
Заслуженный участник
Аватара пользователя


16/07/14
9416
Цюрих
Geen в сообщении #1326549 писал(а):
Не обязательно.
mihaild в сообщении #1326547 писал(а):
обычно

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 18:18 
Заслуженный участник
Аватара пользователя


01/09/13
4744
https://en.wikipedia.org/wiki/Long_double

и вопрос-то был конкретно про случай ТС...

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 21:40 


16/10/14

667
arseniiv в сообщении #1326532 писал(а):
%Lf должно работать

И тем не менее не работает, точнее работает да не так как надо. Пытаясь вводить разные числа я обнаружил что в переменную $x$ всегда заносится значение $1,13303e-317$

===================================

Возможно дело в компиляторе Dew-C++, он предназначен, как следует из названия, для С++, а я пытаюсь писать на нём программы используя только средства языка С

-- 13.07.2018, 21:55 --

В компилятора Pelles C $%Lf$ в $scanf$ работает, вот только long double ничем не отличается от просто double

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение13.07.2018, 22:08 
Заслуженный участник


02/08/11
7059
SpiderHulk в сообщении #1326570 писал(а):
Dew-C++
Да, дело в нём, но не в том, что он плюсовый. Среда Dev-C++ использует gcc (часть MinGW) в качестве компилятора и майкрософтовскую рантайм-библиотеку. Они имеют разные взгляды на размер long double, что и влечёт означенную проблему. То есть это известный баг MinGW. На stackoverflow предлагают решение: #define __USE_MINGW_ANSI_STDIO перед #include <stdio.h>.

 Профиль  
                  
 
 Re: Язык С, scanf и long double
Сообщение03.01.2019, 03:03 


14/07/17
10
Киев
Я тоже долго мучился над этим. Заработало:
long double myld;
printf("Enter long double myld: ");
scanf("%Lf", &myld);
printf("myld = %Lg\n", myld);

Программа выдает:

Enter long double myld: 1,28e-1024
myld = 1,28e-1024

Система программирования CodeBlocks
Дополнительно установленный компилятор: MinGW64
Опция компиляции: -m64
Выяснил, кроме того, что sizeof(long double) = 16;
LDBL_MAX = 1,18973e+4932.
Битовое представление максимального: 7ffeffffffffffffffff,
т.е. 80 бит. Это значит что 128 бит занимает только с целью выравнивания.
Процессор Intel оперирует правающим типом в 80 бит.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: Dmitriy40


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group