Когда не можешь определиться с округлением числа Пи / реактор :: новый дизайн

новый дизайн реактор 

Когда не можешь определиться с округлением числа Пи

2 дня 1-е место	Неделя +172.11 от зЬипатипс
	
2-е место	| +147.03799999999998 от...
3-е место	+139.64 от сгеИ иа
4-е место	+122.28 отТедга
5-е место	+115.63 от ¡Нгопов
6-е место	+95.33 от 0гс1(1
7-е место	+90.96 от Т1ТАМ512
8-е место	+89.33 от с1г9у1к
9-е место	+88.3 от ЭиРШМСка^
10-е

Подробнее
2 дня 1-е место Неделя +172.11 от зЬипатипс 2-е место | +147.03799999999998 от... 3-е место +139.64 от сгеИ иа 4-е место +122.28 отТедга 5-е место +115.63 от ¡Нгопов 6-е место +95.33 от 0гс1(1 7-е место +90.96 от Т1ТАМ512 8-е место +89.33 от с1г9у1к 9-е место +88.3 от ЭиРШМСка^ 10-е место +85.52 отТедга
новый дизайн,реактор
Еще на тему
Развернуть

Отличный комментарий!

Какой маленький у кого-то минусомёт. Совсем крошечный.

SUPRIMEkair SUPRIMEkair29.10.202400:37ссылка
+93.7

Какой маленький у кого-то минусомёт. Совсем крошечный.

Просто холодно!
Melatori Melatori 29.10.202400:37 ответить ссылка 46.4
malchish malchish 29.10.202401:44 ответить ссылка 42.6

или наоборот, настолько огромный, что у него начал расти второй уже

А мне нравица. Буду теперь думать что мой коммент избраный.

Размер не главное Т_Т
skim skim 29.10.202407:42 ответить ссылка 1.1

Может и крошечный, да в бенефисе кринжа судьёй был

Sanctu Sanctu 29.10.202408:52 ответить ссылка 12.8
С float в базе иногда такая фигня бывает.
Berd Berd 29.10.202411:44 ответить ссылка 1.4
дор

Я предполагаю, что это довольно известная проблема 0.1+0.2 = 0.30000000000000004. У неё очень интересная причина: из-за того, что компьютеры хранят числа в двоичной СЧ, многие вещественные числа, которые являются рациональными в 10-ичной СЧ, становятся иррациональными в 2-ичной. А значит, при переводе их обратно появляется небольшая ошибка.

У этой ошибки даже есть свой сайт:

https://0.30000000000000004.com/

https://stackoverflow.com/questions/588004/is-floating-point-math-broken/588014

Та эт все понятно, это случается постоянно. Просто разраб забыл toFixed(2) вызвать. С самим постоянно это происходит(

Это одна из причин, по которой приходится делать что-то вроде такого)

@Override
public boolean equals(Object object) {
return object instanceof PointGeo point
&& Math.abs(point.geo_x - this.geo_x) < 0.000009999999747378752
&& Math.abs(point.geo_y - this.geo_y) < 0.000009999999747378752
&& Math.abs(point.z - this.z) < 0.000009999999747378752;
}

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

Разве нельзя хранить десятичные числа как обычные, просто при выводе ставить точку в нужном месте? Я не программист, не шарю
Dad645 Dad645 29.10.202402:49 ответить ссылка 0.6
Можно, но тогда неинтересно :3
yoburg yoburg 29.10.202403:12 ответить ссылка 10.3
То, что ты описал, называется числом с фиксированной запятой (fixed point), в противоположность обычным числам с плавающей запятой (floating point).

Числа с плавающей запятой представлены в виде мантиссы и экспоненты:
IEEE 754
(Floating Point Numbers)
S Exponent	Mantissa
0 1000 0101 00111100000000000000000
1.001111 x2| = (1001111),= (79)
Mantissa
10
Exponent

Это позволяет представлять как очень маленькие числа в районе нуля, так и очень большие числа, но точность (разница между двумя ближайшими числами) будет ниже, чем в области нуля. Чаще всего, это то, что нужно.

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

Но они все равно двоичные и подвержены ошибкам округления.

Вот например, число 10101 с двумя двоичными знаками после запятой:
1*2² + 0*2¹ + 1*2⁰ + 0*2^(-1) + 1*2^(-2) = 1*4 + 0 + 1*1 + 0 + 1/4 = 5.25
Дробную часть мы можем составлять из суммы степеней двойки: 1/2, 1/4, 1/8, 1/16 итп.

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

Можно хранить числа с основанием 10, но тогда процессор не сможет работать с ними "из коробки" и нужно будет делать вручную. Во многих языках есть встроенный тип или библиотеки. Используется там, где нужна точность, например, в финансах.
На самом деле, как раз для большинства случаев гораздо лучше подходит хранение отдельно целого, и отдельно точки. Если только это не координаты для рендеринга, например, которые надо постоянно считать, и почти никогда не надо выводить.
Все финансы живут строго на целых. Банально лонг - само число(цена, сумма), и ещё байт на позицию запятой. И это лучше подходит для большинства чисел из "реальной жизни". Оценок в том числе. Потому что нет никакого смысла в оценке 2*10-⁶³. Хотя её и можно представить только даблом, в практическом смысле это ноль, кроме специфических случаев.

> Все финансы живут строго на целых. Банально лонг - само число(цена, сумма), и ещё байт на позицию запятой

А в каких случаях это используется? Всегда, когда я работал с финансами (скорее, бухгалтерией) все цены просто хранились в МДЕ (минимальных денежных единицах) и, соответственно, по определению могли быть только целыми. Если же ты считаешь вещественные цены акций на бирже - там будет потеря точности в любой СЧ.

Когда тебе нужны разные валюты вместе, а также разная точность (цены бывают меньше, чем мде иногда), приходится хранить так.
Когда одна валюта, и субценты не нужны, то да, просто мде, там для каждой валюты фиксированная точка(обычно на 2 знаке, но венгры например, такое не прймут, у них 0).
По факту, вот этот мде - это ровно тот же формат, что я описал, просто у тебя второе число, положение точки - константа, потому её нет смысла хранить.

- у моего поста самый длинный рейтинг.

- может самый большой?

Только зарегистрированные и активированные пользователи могут добавлять комментарии.
Похожие темы

Похожие посты
МАГАЗИН
косяк н
\ ДВЕРЕЙ
) косяке ¿)+14.88
(ü)»0 (¿) 3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086 5132 82306647093844609550582231725359408128481117450284102701938521105559644 62 294895493038196442881097566593344 6128475648233786783165271201909145648566 92 34
подробнее»

число 3.14 Пи число пи красивые картинки

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117067982148086 5132 82306647093844609550582231725359408128481117450284102701938521105559644 62 294895493038196442881097566593344 6128475648233786783165271201909145648566 92 34