вывод float

Jun 06, 2005 75 Replies

Hello, Vladislav! You wrote to Alexander Golov on Fri, 01 Jul 2005 11:25:52 +0400:

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

VB> Десятичная запятая "общепринята" лишь в России и еще немногих VB> странах, в основном в мире (в Штатах, Европе) используют точку. Да и VB> в СССР иной раз использовали точку - вот у меня на шкале генератора VB> Г4-102 (75-го года) - точки (на остальных приборах 70..80гг, VB> впрочем, запятые). Посмотри, что у калькуляторов в цифровом поле, и VB> какой символ в цифровом поле у тебя справа...

Зато в СССР не отделяли запятыми десятичные порядки - то еще извращение.

WBR, AVB

Пpивет, Alexey!

*** 01 Jul 05 17:42, Alexey V Bugrov wrote to Vladislav Baliasov:

VB>> привыкнуть). А вот при отсчете с индикатора без разделителя очень VB>> неудобно (когда число многоразрядное, например, на индикаторе VB>> частотометра).

AB> Лучше отделять пробелом или апострофом на худой конец. Совсем без AB> разделения читать, конечно, тяжело.

Пробелом - плохо, неэстетично, тогда уж лучше вообще без разделителя (как пример - на многоразрядном 7-сегментном LCD, на которых в большинстве случаев нет "верхнего" разделителя, пробел там выглядит еще хуже). Апострофом - более-менее. Примерно так же, как и запятой. Я так для себя окончательно и не определился, как лучше выглядит на матричном знакосинтезирующем индикаторе, сейчас рисую апостроф.

с уважением Владислав

Hello,Alexander!

AG> Если мы говорим от 32-разрядном типе float, т.е. с 24-разрядной мантиссой, то AG> он, естественно, всегда может быть адекватно преобразован в 32- разрядный long. AG> Дополнительные нули справа можно вывести в виде строки, никакой другой AG> полезной информации эти разряды не несут.

Например, 1Е-15 или 3.2Е10 ...

Hello, Vladislav! You wrote to Alexey V Bugrov on Fri, 01 Jul 2005 15:20:45 +0400:

AB>> Зато в СССР не отделяли запятыми десятичные порядки - то еще AB>> извращение.

VB> При записи на бумаге - да, выглядит извратно (хотя вполне можно VB> привыкнуть). А вот при отсчете с индикатора без разделителя очень VB> неудобно (когда число многоразрядное, например, на индикаторе VB> частотометра).

Лучше отделять пробелом или апострофом на худой конец. Совсем без разделения читать, конечно, тяжело.

WBR, AVB

Пpивет, Alexey!

*** 01 Jul 05 19:25, Alexey V Bugrov wrote to Vladislav Baliasov:

VB>> Пробелом - плохо, неэстетично,

AB> Пробел должен быть не полноразмерный, а 1/3...1/4 от ширины AB> знакоместа, тогда читается нормально, imho.

А, ну если так, то возможно. Однако на матричных индикаторах такой фокус не пройдет, на тектовых терминалах - тоже. Hа графических панелях - ну, можно попробовать.

с уважением Владислав

Hi Zahar, hope you are having a nice day!

01 Июл 05, Zahar Kiselev wrote to Alexander Golov:

ZK> Ты сходу можешь назвать хоть один _прибор_, выводящий именно запятую в ZK> качестве разделителя? Hе надо все-таки путать книжную полиграфию и ZK> метрологию... AG>> а заморочки программистов действительно лишь их личные проблемы. ZK> В ГОСТах - тоже "личные заморочки"?

Отсюда по-подробнее, пожалуйста. В каких гостах запрещают использовать запятую в качестве отделителя дробной части?

WBR, AVB

Hi Vladislav, hope you are having a nice day!

01 Июл 05, Vladislav Baliasov wrote to Alexey V Bugrov:

AB>> Лучше отделять пробелом или апострофом на худой конец. Совсем без AB>> разделения читать, конечно, тяжело.

VB> Пробелом - плохо, неэстетично,

Пробел должен быть не полноразмерный, а 1/3...1/4 от ширины знакоместа, тогда читается нормально, imho.

WBR, AVB

Пpивет, Vladislav.

Вот что Vladislav Baliasov wrote to Alexey V Bugrov:

AB>> Лyчше отделять пpобелом или апостpофом на хyдой конец. Совсем без AB>> pазделения читать, конечно, тяжело.

VB> Пpобелом - плохо, неэстетично, тогда yж лyчше вообще без pазделителя VB> (как пpимеp - на многоpазpядном 7-сегментном LCD, на котоpых в VB> большинстве слyчаев нет "веpхнего" pазделителя, пpобел там выглядит VB> еще хyже). Апостpофом - более-менее. Пpимеpно так же, как и запятой. VB> Я так для себя окончательно и не опpеделился, как лyчше выглядит на VB> матpичном знакосинтезиpyющем индикатоpе, сейчас pисyю апостpоф.

Лyчше всего, навеpно, пpедоставить выбоp юзеpy. Уж как pyгают маздай, а ведь там всё это настpаивается. В смысле интеpфейса с юзеpом y маздая есть чемy поyчиться. В своё вpемя было пpинято тpи поpядка отделять точкой, а десятичнyю часть числа - запятой, совсем как y бypжyев, только наобоpот. :-)

Michael G. Belousoff

formatting link
mailto: mickbell(dog)r66(dot)ru

... ==== Пpоблемy надо pешать до того, как она появится. ====

Привет!

Fri Jul 01 2005 00:46, Dmitry Orlov wrote to Alexander Golov:

...

AG>>>>>> В таком случае это неэффективная конструкция, если AG>>>>>> сравнивать со sleep, на худой конец idle.

DO>>>>> Опять же это зависит от условий. Универсального ответа нет.

AG>>>> Для указанных выше условий ответ очевиден, разве что случай AG>>>> когда sleep и idle не поддерживается.

DO>>> Или не хочется непереносимые конструкции лепить,

AG>> С какого условия они вдруг непереносимее printf стали?

DO> Printf, даже урезанный, штука стандартная, а sleep или idle - команды DO> процессора, которые или есть или их нет.

Я подумал, что ты про самодельный вывод... А sleep и idle не более непереносимая конструкция чем любое обращение к любым ресурсам МК.

...

AG>> Всё это к эффективности никакого отношения не имеет.

DO> Hе имеет, я собственно об эффективности и не говорю. У меня, к примеру, DO> все критичное живет в прерывании, что там в остальное время делается - DO> мне глубоко по-фиг. Электричества в розетке много и памяти в pic18F2620 DO> завались (это тестер для проверки наших балластов). И я совершенно DO> незадумываясь пишу там sprintf(str, " %1.2f kV"CEOL, DO> (exp(0.4*log(Vign_Max))/8.77)); причем только для того, чтобы на DO> опциональном терминале увидеть какие-то похожие на реальность цифры. DO> Причем формула эта просто высосана из пальца и реально проверяется что DO> Vign_Max в неких пределах, никак с тем, что показывается на экране не DO> связанных. Более того, я даже не могу сам точно сказать что же именно я DO> меряю, но знаю, что полученная величина довольно неплохо отражает даже не DO> само напряжение поджига, а способность балласта зажигать лампу.

Мне не понятна база этой агрессивной позиции по отношению к альтернативному способу вывода чисел в ПЗ. Из того, что кому-то в каком-то приборе не нужно экономить вычислительные ресурсы, вовсе не вытекает, что в этом нет нужды и ни у кого более.

...

AG>> Общепринято использовать десятичную запятую, а заморочки

DO> Запятой общепринято порядки отделять...

Если говорить о делопроизводстве (хотя не ясно каким боком оно тут всплыло), то простое изучение возможностей настроек Win покажет, что в данной области ничего общепринятого нет, а имеет место чудовищный курятник из различных комбинаций зяпятых, точек, пробелов и апострофов, причём нередки различия даже в странах использующих один и тот же язык. Я же говорю об общепринятой математической форме записи десятичных дробей, что изучается если и не в начальной школе, то где-то сразу после.

...

AG>>>> Принципиально ничего не мешало бы использовать в качестве AG>>>> Out_Number тот же printf, но опять же создатели стандартного AG>>>> средства не позаботились о выводе чисел с фиксированной AG>>>> запятой.

DO>>> Мы вообще-то про числа с плавающей говорили...

AG>> И мы... Если бы стандартное средство умело выводить числа с AG>> фиксированной запятой,

DO> А что, есть такие числа? Я всегда думал, что это разновидность целого.

Конечно, но запятую то на фиксированное место надо поставить. Сделать это было несложно, но разработчикам printf не пришло в голову.

AG>> то автоматически и решалась бы проблема эффективного вывода значений в AG>> ПЗ в предопределённом формате.

DO> И почему ты так уверен в эффективности этого гипотетического стандартного DO> средства?

Даже если его решать не слишком оптимизируя, всё равно это будет в другом порядке по затратам ресурсов перед %f.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Привет!

Fri Jul 01 2005 09:41, Zahar Kiselev wrote to Alexander Golov:

...

AG>> Общепринято использовать десятичную запятую,

ZK> Ты сходу можешь назвать хоть один _прибор_, выводящий именно запятую в ZK> качестве разделителя?

Если не ворошить дальние ящики вот: Ч3-63 и Г5-78 на обоих обозначены разделители запятые. Уверен, если вытащить ещё с десяток советских приборов, результат будет тот же. На импортных скорее всего будут точки (под англо- американский стиль), причём в современных в немалой степени и потому, что printf вариантов не продоставляет.

ZK> Hе надо все-таки путать книжную полиграфию и метрологию...

Я не знаю причём тут некая "книжная полиграфия" и уже тем более метрология, а записывать числа учат в школе.

AG>> а заморочки программистов действительно лишь их личные проблемы.

ZK> В ГОСТах - тоже "личные заморочки"?

В ГОСТах то как раз всё в порядке, только запятые, хотя, конечно, в нынешних новоделах чего только не встретишь, они подчас даже собственную терминологию провести через весь текст оказываются не способны.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Привет!

Fri Jul 01 2005 11:25, Vladislav Baliasov wrote to Alexander Golov:

...

DO>>> Hу это уже твои личные проблемы, меня вплоне устраивает этот DO>>> общепринятый вариант.

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

VB> Десятичная запятая "общепринята" лишь в России и еще немногих странах, в VB> основном в мире (в Штатах, Европе) используют точку.

Это не так, десятичную запятую используют в делопроизводстве очень большое число стран, в т.ч. в Европе: Австрия, Бельгия, Болгария, Венгрия, Германия, Греция, Дания, Исландия, Испания, Италия, Польша, Португалия, Румыния, Турция, Финляндия, Франция, Чехословакия, Швеция, Югославия.

Математическая же символика везде близка.

Александр Голов, Москва, snipped-for-privacy@mail.ru

Привет!

Fri Jul 01 2005 17:33, Gena Gutnicky wrote to Alexander Golov:

...

AG>> Если мы говорим от 32-разрядном типе float, т.е. с 24-разрядной AG>> мантиссой, то AG>> он, естественно, всегда может быть адекватно преобразован в 32- AG>> разрядный long AG>> Дополнительные нули справа можно вывести в виде строки, AG>> другой полезной информации эти разряды не несут.

GG> Hапример, 1Е-15 или 3.2Е10 ...

И что с этим не так? Непонятно как умножить значение на 1e15(1e-10) и вывести строку из 15(10) нулей слева(справа)?

Александр Голов, Москва, snipped-for-privacy@mail.ru

Hello, Alexander Golov! You wrote in conference fido7.ru.embedded to Dmitry Orlov on Sun, 17 Jul 2005 09:40:14

+0000 (UTC):

AG>>>>>>> В таком случае это неэффективная конструкция, если AG>>>>>>> сравнивать со sleep, на худой конец idle.

DO>>>>>> Опять же это зависит от условий. Универсального ответа DO>>>>>> нет.

AG>>>>> Для указанных выше условий ответ очевиден, разве что AG>>>>> случай когда sleep и idle не поддерживается.

DO>>>> Или не хочется непереносимые конструкции лепить,

AG>>> С какого условия они вдруг непереносимее printf стали?

DO>> Printf, даже урезанный, штука стандартная, а sleep или idle - DO>> команды процессора, которые или есть или их нет.

AG> Я подумал, что ты про самодельный вывод... А sleep и idle не

Я про [s]printf...

AG> более непереносимая конструкция чем любое обращение к любым AG> ресурсам МК.

Коих в "логических" кусках программы я по возможности стараюсь избегать.

AG>>> Всё это к эффективности никакого отношения не имеет.

DO>> Hе имеет, я собственно об эффективности и не говорю. У меня, DO>> к примеру, все критичное живет в прерывании, что там в DO>> остальное время делается - DO>> мне глубоко по-фиг.

AG> Мне не понятна база этой агрессивной позиции по отношению к AG> альтернативному способу вывода чисел в ПЗ.

??? Ты что-то путаешь, ничего против альтернативного вывода я не имею, я возражаю лишь против отрицания стандартных и удобных средств из-за их несколько преувеличенной неэффективности.

AG> Из того, что кому-то в каком-то приборе не нужно экономить вычислительные AG> ресурсы, вовсе не вытекает, что в этом нет нужды и ни у кого более.

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

AG>>> Общепринято использовать десятичную запятую, а заморочки

DO>> Запятой общепринято порядки отделять...

AG> Если говорить о делопроизводстве (хотя не ясно каким боком оно AG> тут всплыло), то простое изучение возможностей настроек Win

Ты вдруг заговорил... А точка в программировании для записи floating/fixed _point_ чисел таки общепринята со времен самых первых языков программирования. Как и использование * в качестве символа умножения. И не претворяйся, что ты этого не знаешь - не поверит никто.

AG>>>>> Принципиально ничего не мешало бы использовать в качестве AG>>>>> Out_Number тот же printf, но опять же создатели AG>>>>> стандартного средства не позаботились о выводе чисел с AG>>>>> фиксированной запятой.

DO>>>> Мы вообще-то про числа с плавающей говорили...

AG>>> И мы... Если бы стандартное средство умело выводить числа с AG>>> фиксированной запятой,

DO>> А что, есть такие числа? Я всегда думал, что это DO>> разновидность целого.

AG> Конечно, но запятую то на фиксированное место надо поставить. AG> Сделать это было несложно, но разработчикам printf не пришло в AG> голову.

Просто на фиг не нужно. Библиотека только еще сильнее выросла бы.

AG>>> то автоматически и решалась бы проблема эффективного вывода AG>>> значений в ПЗ в предопределённом формате.

DO>> И почему ты так уверен в эффективности этого гипотетического DO>> стандартного средства?

AG> Даже если его решать не слишком оптимизируя, всё равно это AG> будет в другом порядке по затратам ресурсов перед %f.

А %f ты предлагаешь вообще исключить???

dima

formatting link

Привет, Alexander !

AG>>> Если мы говорим от 32-разрядном типе float, т.е. с 24-разрядной AG>>> мантиссой, то AG>>> он, естественно, всегда может быть адекватно преобразован в 32- AG>>> разрядный long AG>>> Дополнительные нули справа можно вывести в виде строки, AG>>> другой полезной информации эти разряды не несут.

GG>> Hапример, 1Е-15 или 3.2Е10 ...

AG> И что с этим не так? Непонятно как умножить значение на 1e15(1e-10) и вывести AG> строку из 15(10) нулей слева(справа)?

В первом случае результат преобразования будет 0, во втором - слишком много нулей - трудно для восприятия. Или я слишком буквально понял "адекватно преобразован" как float -> long int ? :-) Речь пока шла о выводе, или же в народе зреют экстремистские настроения насчет того, что плавучка и вообще не нужна, даже в вычислениях ?

На моей прежней работе пришел новый мОлодец, корифан, сразу сказал, что плавающая арифметика - выдумка классовых врагов и на фиг никому не нужна, но тем не менее взял мою плавучку и в первых 3-4 своих приборах пользовал, нещадно ее ругая. Сейчас, кажется, перешел на С.

WBR GG

AG>>> Общепринято использовать десятичную запятую, ZK>> Ты сходу можешь назвать хоть один _прибор_, выводящий именно запятую в ZK>> качестве разделителя? AG> результат будет тот же. Hа импортных скорее всего будут точки (под англо- AG> американский стиль), причём в современных в немалой степени и потому, что AG> printf вариантов не продоставляет.

И правильно делает. Потому когда есть варианты непременно вылезают проблемы совместимости: такой вывод в scanf кому-нибудь потом не скормить будет. Да что за примерами далеко ходить, обычный микрософт office проблем вызывает...

ZK>> Hе надо все-таки путать книжную полиграфию и метрологию... AG> Я не знаю причём тут некая "книжная полиграфия" и уже тем более AG> метрология, а AG> записывать числа учат в школе.

А исходники scanf пишут в далёкой США и кладут на локализацию. А даже если и нет, то локаль она в разных случаях сильно разная оказывается. Лучше ориентироваться на "C" в таком случае, где разделитель -- точка.

DO>> А что, есть такие числа? Я всегда думал, что это разновидность целого. AG> Конечно, но запятую то на фиксированное место надо поставить. Сделать это AG> было AG> несложно, но разработчикам printf не пришло в голову.

Разработчики printf хорошо понимали, почему не нужно плодить лишних сущностей.

prinft("%N.Nd.%N.Nd", (a>>X)&Y, a&Z) -- чем не вариант?

Hапиши вокруг printf обёртку и предоставь общественности, если очень неймётся.

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required