Софт под Linux, разные программы, но только связанные с Linux
Модератор: /dev/random
xBeginner
Сообщения: 9
Сообщение
xBeginner » 09.03.2018 07:35
Наткнулся на "подлянку"
-нормально 1023
возвращает 1022.0000000000001
Я понимаю, десятичные дроби не переводятся в двоичную систему, но
-опять нормально 10022
Что за фишка или баг?
Спасибо
под-пись
Bizdelnick
Модератор
Сообщения: 21115
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 09.03.2018 10:21
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
xBeginner
Сообщения: 9
Сообщение
xBeginner » 09.03.2018 21:21
Не объясняет.
под-пись
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 10.03.2018 02:21
xBeginner
Особенность хранения в памяти вещественных чисел (в соответствии с указанным стандартом). 10.23 хранится в памяти как 10.229999542236328125, 10.22 - как 10.22000026702880859375, а 100.22 - как 100.220001220703125.
xBeginner
Сообщения: 9
Сообщение
xBeginner » 10.03.2018 02:37
Спасибо, но всё равно плохо понимаю. У меня получается в интервале [0.00..1000.00] с шагом .01 умножение на 100 даёт для 11% случаев видимую погрешность. При этом тоже но в AWK работает "точно".
под-пись
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 11.03.2018 00:17
Bizdelnick
Модератор
Сообщения: 21115
Статус: nulla salus bello
ОС: Debian GNU/Linux
Сообщение
Bizdelnick » 11.03.2018 11:16
xBeginner писал(а): ↑ 10.03.2018 02:37
При этом тоже но в AWK работает "точно".
Это он не работает "точно", а отбрасывает "лишние" цифры.
Shell
% awk 'BEGIN{ print 0.9999999 }'
1
% awk 'BEGIN{ print 1.000001 }'
1
% awk 'BEGIN{ printf "%.13f\n", 10.22*100 }'
1022.0000000000001
%
https://www.gnu.org/software/gawk/manual/ht...mputations.html
Пишите правильно:
в консоли
вк у́пе (с чем-либо)
в о бщем
воо бще в течение (часа)
новичо к
ню анс
по у молчанию приемле мо
проблем а
пробо вать
траф ик
xBeginner
Сообщения: 9
Сообщение
xBeginner » 12.03.2018 02:21
Спасибо. А в jq есть округление? floor нашёл в man, а округление не вижу. Много букаф, может пропускаю
под-пись
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 13.03.2018 01:41
xBeginner
Ну можно и floor использовать:
1. Превратить в целое
2. Отрезать дроби
3. Превратить в дробь
Что-то типа floor(10.22 * 100 * N) / N, где N - нужная точность после запятой (100, 1000 и т.д.)
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu
Сообщение
serzh-z » 13.03.2018 01:47
P.S.: в версии 1.3 ничего из этого недоступно, ни include, с помощью которого можно было свой модуль добавить, ни floor. В 1.5, судя по всему, можно свой модуль добавить и написать в нем функцию, которая будет делать toFixed или toPrecision.
xBeginner
Сообщения: 9
Сообщение
xBeginner » 13.03.2018 02:03
Спасибо, но это сложно для меня. Практический вопрос решил шеллом.
под-пись