Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Формат STL


Автор: Sergio 15.5.2007, 16:31
Здраствуйте. Вот структура STL формата:
Код

  facet normal 0.000000e+000 -0.000000e+000 1.000000e+000
    outer loop
      vertex -4.527885e+001 2.314136e+001 0.000000e+000
      vertex -4.527885e+001 -3.119173e+001 0.000000e+000
      vertex 2.511635e+001 2.314136e+001 0.000000e+000
    endloop

Скажите пожалуйста какой тип этих чисел?
Зарание спасибо.

Автор: archimed7592 15.5.2007, 16:36
double

Автор: Sergio 15.5.2007, 16:53
archimed7592, я когда перевожу в тип double, выводит результат
Код

-4.52789

а должно
Цитата

-4.527885e+001

Почему-то заокругляет smile 

Автор: archimed7592 15.5.2007, 16:55
извини, я немного разучился читать мысли - как переводишь? smile

Автор: Earnest 15.5.2007, 17:03
Скорее всего, чем-то вроде printf. По-умолчанию даблы и флоаты при выводе округляются до 6 значащих цифр. 
Да и при выводе в поток, кажется, так же.
Если тебе мало цифр в выводе, меняй параметры.
Кроме того, по умолчанию стоит формат с плавающей точкой. Если нужно именно научную нотацию - опять устанавливай параметры вывода.
Но сначала подумай, надо ли оно тебе: сами double числа от этого не округлятся.

И причем здесь STL? 

Автор: Sergio 15.5.2007, 17:08
Типа вот так smile :
Цитата

float a = -4.52789;
double b = (double)a;

Автор: JackYF 15.5.2007, 17:17
Цитата(Sergio @  15.5.2007,  17:08 Найти цитируемый пост)
ипа вот так smile :


Мдя smile И откуда здесь остальные значащие цифры появятся?

Автор: archimed7592 15.5.2007, 17:23
Sergio, 
Код
#include <ostream>
#include <iostream>

int main ()
{
    double d = -4.527885e+001;
    std::cout << d << std::endl;
    std::ios_base::fmtflags old_f = std::cout.flags (std::ios::scientific);
    std::cout << d << std::endl;
    std::cout.flags (old_f);
    std::cout << d << std::endl;
    
    
    return 0;
}

Автор: JackYF 15.5.2007, 18:36
archimed7592, ох жесть... в данном случае легче будет

Код

#include <iostream>
int main ()
{
    double d = -4.527885e+001;

    printf("%f\n", d);
    printf("%.10f\n", d);
    
    return 0;
}

ну или хотя бы

Код

#include <iostream>

#include <boost/format.hpp>
int main ()
{
    double d = -4.527885e+001;

    std::cout << format("%f\n") % d;
    std::cout << format("%.9f\n") % d;
    
    return 0;
}


Автор: archimed7592 15.5.2007, 18:47
JackYF, хоть убей, не знаю откуда во мне это, но я терпеть не могу нетипобезопасные конструкции smile

Добавлено через 4 минуты и 14 секунд
ещё так можно
Код
#include <ostream>
#include <iostream>
int main ()
{
    double d = -4.527885e+001;
    std::cout << d << std::endl << std::scientific << d << std::endl;
    
    return 0;
}

Автор: JackYF 15.5.2007, 18:53
Цитата(JackYF @  15.5.2007,  18:36 Найти цитируемый пост)
#include <iostream>
#include <boost/format.hpp>
int main ()
{
    double d = -4.527885e+001;
    std::cout << format("%f\n") % d;
    std::cout << format("%.9f\n") % d;
    
    return 0;
}


Здесь уже типобезопастные.

Я и сам не очень-то люблю нетипобезопастные вещи.

Автор: Любитель 18.5.2007, 11:06
JackYF, в первом примере инклюд stdio.h по-хорошему. Или cstdio. iostream при чём?

А boost::format - это типобезопасно. При нессответствии форматной строки экзепшены будут, подставляемые выражения через перегрузку работают (std::istringstream::operator<<). И пр.

Прикольно, кстати, от тебя слышить рекомендации буста. Блин, не ожидал!  smile 

Автор: JackYF 19.5.2007, 00:30
Цитата(Любитель @  18.5.2007,  11:06 Найти цитируемый пост)
в первом примере инклюд stdio.h по-хорошему. Или cstdio. iostream при чём?


Согласен. Я на скорую руку писал...

Цитата(Любитель @  18.5.2007,  11:06 Найти цитируемый пост)
Прикольно, кстати, от тебя слышить рекомендации буста. Блин, не ожидал!  smile

Ну говорил же я когда-то, что когда понадобится буст, то начну с ним активно работать. Когда увидел, чем он реально может помочь в некоторых местах - возрадовался. И теперь всем буду советовать smile.

Автор: Любитель 19.5.2007, 13:51
Цитата(JackYF @  19.5.2007,  00:30 Найти цитируемый пост)
И теперь всем буду советовать 

УРА!!! Все любители буста объединятесь!

Автор: archimed7592 20.5.2007, 00:06
Цитата(Любитель @  19.5.2007,  13:51 Найти цитируемый пост)
Все любители буста объединятесь! 
да не вопрос... кому заявочки на членство в клубе "boost promoters"? ;)

Автор: Hurricane 20.5.2007, 05:36
Цитата(Любитель @  19.5.2007,  05:51 Найти цитируемый пост)
УРА!!! Все любители буста объединятесь! 


Цитата(archimed7592 @  19.5.2007,  16:06 Найти цитируемый пост)
да не вопрос... кому заявочки на членство в клубе "boost promoters"? ;) 


По работе, в силу особенностей проекта, использую stl. Но мысленно я с вами!  smile 

Автор: JackYF 20.5.2007, 18:17
 smile Итак, нас уже четверо smile Неплохо.

Автор: Любитель 25.5.2007, 10:29
Надо создать "Клуб любителей буста" smile

Автор: archimed7592 25.5.2007, 11:20
ну ты же у нас Любитель - вот и займись smile 

Автор: JackYF 25.5.2007, 16:26
+1

Автор: MAKCim 25.5.2007, 16:43

M
MAKCim

Hurricane, JackYF, Любитель, archimed7592 - 
прекращайте оффтоп

Автор: JackYF 25.5.2007, 16:50
Хы, топик у нас называется "формат STL". Поэтому сейчас то, что обсуждаем мы, больше относится к теме, чем сам вопрос, имхо. Отношения стандарта на тип double и STL крайне слабы.
Впрочем, это тоже, наверное, оффтоп smile

Автор: MAKCim 25.5.2007, 17:29
Цитата(JackYF @  25.5.2007,  16:50 Найти цитируемый пост)
Поэтому сейчас то, что обсуждаем мы, больше относится к теме, чем сам вопрос

правда?
Цитата(Любитель @  19.5.2007,  13:51 Найти цитируемый пост)
УРА!!! Все любители буста объединятесь! 

Цитата(archimed7592 @  20.5.2007,  00:06 Найти цитируемый пост)
да не вопрос... кому заявочки на членство в клубе "boost promoters"? ;) 

Цитата(Hurricane @  20.5.2007,  05:36 Найти цитируемый пост)
По работе, в силу особенностей проекта, использую stl. Но мысленно я с вами! 

Цитата(JackYF @  20.5.2007,  18:17 Найти цитируемый пост)
Итак, нас уже четверо smile Неплохо. 

Цитата(Любитель @  25.5.2007,  10:29 Найти цитируемый пост)
Надо создать "Клуб любителей буста"

Цитата(archimed7592 @  25.5.2007,  11:20 Найти цитируемый пост)
ну ты же у нас Любитель - вот и займись

Цитата(JackYF @  25.5.2007,  16:26 Найти цитируемый пост)
+1 


Автор: JackYF 25.5.2007, 20:41
Ну... smile

Тема вокруг буста, что не stl, но его развитие.
А вопрос был про соглашения double.

Хотя, конечно, вообще оффтоп. Тему можно закрывать, думаю smile

Автор: nerezus 25.5.2007, 21:34
вот бы буст.питон сделали бы частью STL..... Я тогда бы сразу в С++ начал бы шарить ))))

Автор: archimed7592 25.5.2007, 22:31
nerezus, ой, нескоро это будет, нескоро...

Автор: Любитель 25.5.2007, 23:35
Цитата(MAKCim @  25.5.2007,  16:43 Найти цитируемый пост)
прекращайте оффтоп

MAKCim, можеть лучше куда-нибудь перенесёшь?  smile А то такая хорошая тема заглохнет... :(

И кстати правда - можно объяснить какое отношение вопрос имел к заголовку топика?

Цитата(nerezus @  25.5.2007,  21:34 Найти цитируемый пост)
вот бы буст.питон сделали бы частью STL

STL - никогда. Ибо СТЛ - это просто либа, которая в исходном варианте больше не существует. Это вовсе не вся стандартная библиотека плюсов, хотя на все компоненты последней STL оаказала идеологическое влияние.

Автор: Earnest 27.5.2007, 18:49
Модератор: Тему закрываю, т.к. разговор пошел ни о чем

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)