Re[10]: Зачем так делать
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.05.14 09:56
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Тем не менее, уже давно можно типобезопасно писать print ("...", a, b, c) вместо страхолюдного format ("...") % a % b % c;

так напиши обертку, и будет тебе 'format("...", a, b, c)', думаю, строк в двадцать уложишься.
или твой вариант, в компайл-тайме парсит форматную строку и проверяет соответствие типов?

CC>Причём сохраняя printf-совместимый синтаксис, чтоб не надо было править сотни строк в готовом коде при портировании.

boost.format отлично поддерживает printf-синтаксис. тыц.

CC>Как ты думаешь, что будет если буст внезапно резко поменяет интерфейс в этой библиотеке?

CC>Что им скажут все те, кому понадобится переписывать все свои вызовы?
я думаю, что им не нужно избавляться от текущего boost.format, а поступить так, как поступили с сигналами. (boost.signals2)
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[4]: Зачем так делать
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.05.14 09:59
Оценка:
Здравствуйте, breee breee, Вы писали:

BB>А как же boost::filesystem::ofstream file(file_name)?

думаю, Vain имел в виду что-то типа функции 'boost::filesystem::create_file(...)', ведь есть же функция создания директории.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[11]: Зачем так делать
От: niXman Ниоткуда https://github.com/niXman
Дата: 01.05.14 10:25
Оценка:
Здравствуйте, niXman, Вы писали:

CC>>Тем не менее, уже давно можно типобезопасно писать print ("...", a, b, c) вместо страхолюдного format ("...") % a % b % c;

X>так напиши обертку, и будет тебе 'format("...", a, b, c)', думаю, строк в двадцать уложишься.
но в этом случае, не представляю, как ты будешь кешировать форматировщик...
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
Re[3]: Зачем так делать
От: Кодт Россия  
Дата: 04.05.14 11:40
Оценка: +1
Здравствуйте, FrozenHeart, Вы писали:

К>> А что делать? Выводить там "121077±0.5" или "121076.(9)" ?


FH>Почему бы не выводить реальное значение, которым оперирует приложение? Т.е. то же самое, что выведется в случае std::fixed и std::setprecision.


Реальное значение там — все единички в двоичной мантиссе (за последний разряд не уверен, может быть и 0).
И что с этим добром делать?

А setprecision тебе просто так не поможет, там в 11-м десятичном знаке ошибка появляется. http://ideone.com/byZKxy
Перекуём баги на фичи!
Re[3]: Зачем так делать
От: Mr.Delphist  
Дата: 05.05.14 13:46
Оценка:
Здравствуйте, FrozenHeart, Вы писали:

ХГД>> А что не так? Точку не вывело?


FH>То, что на самом деле value * std::pow(10.0, 5) дало в итоге вовсе не 121077, а стрим при этом вывел именно это значение.


Первое — вывод с округлением
Второе — вывод с отсечением дробной части

Немного псевдокода с псевдоконстантами:
a = 121076.9999999999999
printf(round(a)); // 121076
printf(floor(a)); // 121077

a = 121077.1111111111111
printf(round(a)); // 121077
printf(floor(a)); // 121077


"Машинное эпсилон" никто не отменял
Re[2]: Зачем так делать
От: antonio_banderas Россия  
Дата: 06.05.14 10:47
Оценка:
Здравствуйте, Vain, Вы писали:

V>Здравствуйте, FrozenHeart, Вы писали:


FH>>Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно.

V>Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы.

Может, это потому, что уже есть функции типа fopen, и незачем зря их дублировать?
Re[3]: Зачем так делать
От: Vain Россия google.ru
Дата: 06.05.14 14:21
Оценка:
Здравствуйте, antonio_banderas, Вы писали:

FH>>>Да, все наслышаны об операциях над числами с плавающей точкой, но каждый раз поражаюсь, как сразу несколько особенностей могут "выстрелить" одновременно.

V>>Я вот недавно взял буст filesystem и не смог найти элементарную операцию создания файла. Ненавижу стримы.
_>Может, это потому, что уже есть функции типа fopen, и незачем зря их дублировать?
fopen это с, буст — с++. буст приспособлен работать с потоками. Придётся тебе так и так всё конвертировать в потоки.
[In theory there is no difference between theory and practice. In
practice there is.]
[Даю очевидные ответы на риторические вопросы]
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.