Ну вот зачем стримы так делают по умолчанию? Кому это надо?
#include <cmath>
#include <iostream>
int main()
{
double value = 1.21077;
std::cout
<< value * std::pow(10.0, 5) << '\n'
<< static_cast<int>(value * std::pow(10.0, 5)) << '\n';
}
Output
121077
121076
Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно.
Здравствуйте, FrozenHeart, Вы писали:
FH>Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно.
Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
FH>Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно.
А что не так? Точку не вывело?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, FrozenHeart, Вы писали:
ХГД>> А что не так? Точку не вывело?
FH>То, что на самом деле value * std::pow(10.0, 5) дало в итоге вовсе не 121077, а стрим при этом вывел именно это значение.
Ну так от форматированного вывода люди обычно хотят округления. И он им это округление предоставляет Что стримы, что printf.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, FrozenHeart, Вы писали:
V>> Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы. FH>Не совсем понял -- это сарказм?
Нет. Стримы это вообще на любителя. Я не любитель писать все эти << >>, предпочитаю видеть строчку форматирования целиком без всяких << >>.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, Vain, Вы писали:
V>Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы.
дизайн стримов конечно ахтунг, и возможности создать файл при помощи boost.filesystem тоже нет, но есть ведь 'std::ofstream file(file_name);'. зачем для этого буст?
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, Vain, Вы писали:
V>Нет. Стримы это вообще на любителя. Я не любитель писать все эти << >>, предпочитаю видеть строчку форматирования целиком без всяких << >>.
так boost.format же
'file << (boost::format("a=%1%, b=%2%, c=%3%") % a % b % c)'
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
X>'file << (boost::format("a=%1%, b=%2%, c=%3%") % a % b % c)'
Я предпочту всё таки стандартный синтаксис: format("a=%u, b=%x, c=%e", a, b, c)
Тем более что на новом стандарте это всё делается красиво, быстро и typesafe.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Я предпочту всё таки стандартный синтаксис: format("a=%u, b=%x, c=%e", a, b, c) CC>Тем более что на новом стандарте это всё делается красиво, быстро и typesafe.
предпочитай и делай. только не забудь показать, когда сделаешь. а то бустовцы все бьются над typesafe-format`ом, но ничего толкового, юзабильного и соответствующего printf`у не получается. (думаю из-за ненадобности, boost.format делает все необходимое, и даже больше)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
CC>>Я предпочту всё таки стандартный синтаксис: format("a=%u, b=%x, c=%e", a, b, c) CC>>Тем более что на новом стандарте это всё делается красиво, быстро и typesafe. X>предпочитай и делай.
Уже сделано давно и используется.
X> только не забудь показать, когда сделаешь.
Весь выкладывать — многабукаф будет.
Вот для затравки header
X> а то бустовцы все бьются над typesafe-format`ом, но ничего толкового, юзабильного и соответствующего printf`у не получается.
Печалька. Пусть попросят тех, кто умеет.
X> думаю из-за ненадобности, boost.format делает все необходимое, и даже больше
Думаю что это скорее из-за того что они увязли в backward compatibility.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Весь выкладывать — многабукаф будет.
а какой смысл код прятать?
CC>Вот для затравки header
это же псевдокод =)
CC>Печалька. Пусть попросят тех, кто умеет.
ага, тебя =)
CC>Думаю что это скорее из-за того что они увязли в backward compatibility.
омг %)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Здравствуйте, niXman, Вы писали:
CC>>Весь выкладывать — многабукаф будет. X>а какой смысл код прятать?
Его просто много.
CC>>Вот для затравки header X>это же псевдокод =)
Это кусок реального header
По нему в общем то всё видно как оно работает.
CC>>Печалька. Пусть попросят тех, кто умеет. X>ага, тебя =)
Не волнуйся, я откажусь.
Мне их coding standard местами не нравится.
Тем не менее, уже давно можно типобезопасно писать print ("...", a, b, c) вместо страхолюдного format ("...") % a % b % c;
Причём сохраняя printf-совместимый синтаксис, чтоб не надо было править сотни строк в готовом коде при портировании.
CC>>Думаю что это скорее из-за того что они увязли в backward compatibility. X>омг %)
Как ты думаешь, что будет если буст внезапно резко поменяет интерфейс в этой библиотеке?
Что им скажут все те, кому понадобится переписывать все свои вызовы?
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, niXman, Вы писали:
X>Здравствуйте, Vain, Вы писали:
V>>Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы. X>дизайн стримов конечно ахтунг, и возможности создать файл при помощи boost.filesystem тоже нет, но есть ведь 'std::ofstream file(file_name);'. зачем для этого буст?
А как же boost::filesystem::ofstream file(file_name)?
Здравствуйте, FrozenHeart, Вы писали:
К>> А что делать? Выводить там "121077±0.5" или "121076.(9)" ?
FH>Почему бы не выводить реальное значение, которым оперирует приложение? Т.е. то же самое, что выведется в случае std::fixed и std::setprecision.
Большинство реальных значений чисел с плавающей точкой будут иметь очень длинное представление в виде строки в десятичной системе счисления, и при выводе есть всего два варианта — либо округлять либо отбрасывать то, что не влезло. И округление — все же вариант более удобный и создающий меньше проблем.