Опрос: какой вариант отображения double лучше и почему?

какой вариант отображения double лучше и почему?

  • 1E+15

    Голосов: 13 28,9%
  • 1.0E+15

    Голосов: 32 71,1%

  • Всего проголосовало
    45

tony2001

TeaM PHPClub
>Т.е. 1.0 измерено точнее, чем 1
>1.0 может быть 1.01 или 1.0443, но не может быть 1.1 (а 1 может быть 1.1)

т.е. 2-й вариант более точный, так?

>Первый вариант

бррр..
 

kruglov

Новичок
1.0 показывает, что в нашем числе первая цифра 1, вторая 0. Что мы это измерили и гарантируем эти цифры. А остальные - не гарантируем.

1.00 показывает, что мы гарантируем 2 знака после запятой (измерили с большей точностью)

1.000 - гарантируем три... и т.д.

Таким образом, нули в конце показывают только погрешность измерения.

1.1222 и 1.12220 - есть числа, измеренные с разной погрешностью.

Вам нужно показывать погрешность? Эта погрешность как-то хранится?

-~{}~ 16.04.07 20:54:

В конце стоит 0, чтобы показыть, что там именно ноль, а не риски на шкале кончились.
 

tony2001

TeaM PHPClub
>Вам нужно показывать погрешность? Эта погрешность как-то хранится?
мне ничего не нужно показывать.
меня интересует какая из форм записи более правильная и как это обосновать.

# printf "%G" 1000000
1E+06

означает ли это, что после единицы нули там не гарантированы?
имо нет. просто это такая форма записи и к гарантиям никакого отношения не имеет.
 

tony2001

TeaM PHPClub
baev
меня не столько выбор интересует, сколько обоснование выбора.
по всем этим ссылкам я этого обоснования не вижу (пропустил?).
 

kruglov

Новичок
tony2001
Обе формы чисел правильные, у них просто разные области применения.

Первая, где нули после запятой не показываются в принципе, это из области точной математики. Поделив 20 дней на 10 землекопов, получим не 2.0, а 2.

А вот температура больного человека, измеренная градусником для "улицы", будет 40 градусов (но не 40.0, не 40.2 и не 39.9, мы не имеем права на "дробности", точность инструмента не позволяет), а измеренная медицинским термометром, будет 40.0, и на завершающий 0 мы уже имеем право, точность прибора позволила.

Что-то я повторяюсь.

Вообще, я это проходил в школе на физике классе в 8 или 9 от силы.
 

tony2001

TeaM PHPClub
землекопы и термометр - это безусловно прекрасно.
непонятно только 1 000 000 000 000 000 - это землекопы или градусы?

пока я не вижу четких аргументов ни за 1й, ни за 2й вариант, упоминание школы таковым определенно не является.
 

kruglov

Новичок
tony2001
А это вам решать, что это у вас.
Точно ли это квадриллион или примерно. И если примерно, то до какого знака. Там и нули обрывайте. Все.

-~{}~ 16.04.07 23:02:

А поскольку у нас разговор, я понимаю, чисто теоретический, то придумывать за пользователя погрешность и дописывать нулики мы права, я думаю, не имеем.

-~{}~ 16.04.07 23:20:

Пример:
В одном петабайте примерно 1e+15 байт. Правильно? Правильно.

А теперь я говорю, что в петабайте примерно 1.0e+15 байт. Правильно? Нет! В нем 1.1e+15 байт! (1 125 899 906 842 624)

Опаньки.
 

tony2001

TeaM PHPClub
>Точно ли это квадриллион или примерно. И если примерно, то до какого знака.
>Там и нули обрывайте. Все.

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

>А поскольку у нас разговор, я понимаю, чисто теоретический

разговор вполне практический - его результат влияет на то, как будут отображаться float numbers в PHP при их преобразовании в текст.
оба варианта меня лично вполне устраивают, поэтому я ищу аргументы, которые бы явно указали на один из них.

>то придумывать за пользователя погрешность и дописывать нулики мы права, я думаю, не имеем.

Безусловно имеем, если на то есть соотв-щее правило.

-~{}~ 16.04.07 23:33:

в одной тысяче петабайтов 1.1258999068426E+18 байт.
"сжимаются" только нули на конце и то, что не влазит в precision.
 

kruglov

Новичок
Ну, если будет правило, что мы за пользователя дописываем именно 1 нолик (не 0, не 2, не 3), то на здоровье. В математике мне таких правил не известно.

Мое мнение, что лишний нолик - это лишняя информация, которую мы зачем-то добавляем к данным.

"сжимаются" только нули на конце...
На мой взгляд - и прекрасно. Сколько нулей на конце ни будет, пускай все сжимаются.

Почему 1.12345E+10 не должно претерпевать изменений, а 1E+10 - должно? Все равно после запятой количество знаков может быть самым разным, так что никакой красивой "табличности" не получится.

Лишний ноль просто нелогичен. Он сюда введен что ли, чтобы было перед чем точку поставить?

И вообще, хотя в нашей демократии большинство за 1.0, внятных аргументов за этот нолик, мне кажется, нету.

-~{}~ 16.04.07 23:58:

И лично мне бы не хотелось, чтобы
PHP:
echo "В петабайте примерно ".(1E+15)." байт";
выдавал 1.0, потому как на этот 0 никакая математика ему права дать не может. 1.1 там.
 

tony2001

TeaM PHPClub
>Лишний ноль просто нелогичен.
>Он сюда введен что ли, чтобы было перед чем точку поставить?

Так делает имплементация double-to-string из OpenBSD, которая используется в PHP.
Зачем - у меня, к сожалению, нет на столе кремлевского телефона, так чтоб поднять трубку и спросить прямо у автора кода - "ЗАЧЕМ?".

kcalc (и, видимо, glibc) так не делают.
Точно так же не делала старая имплементация double-to-string, которая использовалась (используется) в PHP < 5.2.2.

Поэтому мне либо надо вернуть как было (почему?), либо оставить как есть сейчас (опять - почему?).

>И вообще, хотя в нашей демократии большинство за 1.0,
>внятных аргументов за этот нолик, мне кажется, нету.

Так я про это и говорю. Мне не столько выбор важен, сколько его обоснование.

-~{}~ 17.04.07 00:07:

>И лично мне бы не хотелось, чтобы
>echo "В петабайте примерно ".(1E+15)." байт";
>выдавал 1.0, потому как на этот 0 никакая математика ему права дать не может. 1.1 там.

ну не надо путать теплое с мягким.
1E+15 не равно 1125899906842624.
1E+15 как раз и равно "1" и пятнадцать ноликов.
 

kruglov

Новичок
1. У нас просто числа, без предыстории, без погрешностей, без "плюс-минус 0.3"

2. В математике нем правил о показе каких-то конкретных количеств завершающих ноликов после запятой. Есть только правила о показе этих ноликов, если там действительно нолик и мы его гарантируем, ибо число измерено с такой-то погрешностью.

А это правило, исходя из 1, тут неприменимо. Нету у нас погрешностей.

В юниксе калькулятор bc -l, работающий по умолчанию с точностью 20 знаков после запятой, на 1/2 выдает .50000000000000000000. И он на эти 19 нулей имеет право, такая у него включена точность вычислений, он эти нули гарантирует. И сигнализирует об этом. Напишу scale=5, выдаст .50000

Калькулятор из винды выдает числа в формате 1.e+50 (в инженерном режиме) - лишних нулей нет (правда, есть запятая).
 

tony2001

TeaM PHPClub
>Калькулятор из винды выдает числа в формате 1.e+50 (в инженерном режиме) - лишних нулей нет (правда, есть запятая)
вот, кстати, еще один способ отображения.
но этот мне нравится меньше всех - запятая и сразу за ней "e+50" смотрятся как шифровка из центра.
 

kruglov

Новичок
select 1.0e15 в MySQL выдает 1e+015 или 1e+15 в зависимости от версии и сервера (проверено на 4 серверах)
 

confguru

ExAdmin
Команда форума
Re: Опрос: какой вариант отображения double лучше и почему?

Второй понятней если встречается вдруг среди текста...
если ожидаешт такое - то оба пойдут..

Автор оригинала: tony2001
Есть два варианта отображения числа 1 000 000 000 000 000 (при precision = 14):
1) 1E+15
2) 1.0E+15

Оба варианта допустимы и легальны.
Какой из них по вашему мнению лучше и почему?
 

whirlwind

TDD infected, paranoid
1

>HUMAN CASUALTIES: 0.0

kruglov я тож при просмотре задавался вопросом 0.5 это нижняя часть или верхняя :D
 

Андрейка

Senior pomidor developer
1.0E+15
судя по тому, что double значицца как "Числа с плавающей точкой", то точка таки должна быть)
 

dark-demon

d(^-^)b
1.E+15

точка нужна, чтобы указывать, что число является флоатом.
ноль не нужен совсем.
 

С.

Продвинутый новичок
# printf "%G" 1000000
1E+06
Простите, может я чего не понял, но разве я не буду иметь право настраивать сам, как это должно выдаваться?

# printf "%G" 1000000 --> 1E+06
# printf "%.1G" 1000000 --> 1.0E+06
 
Сверху