Pull to refresh

Comments 8

Можете пояснить эту конструкцию?
if ($this->isNegative()) {
	// 14 is the magic precision number
	$number = bcadd($number, '0', 14);
	if ('.00000000000000' !== substr($number, -15)) {
		$number = bcsub($number, '1', 0);
	}
}
Эмпирически подобранная логика для округления отрицательных чисел к меньшему значению (floor). Подобный подход применяется еще в нескольких местах для оптимизаций и/или упрощения кода.

Точность здесь учитывается только до 14 знака после запятой. Можно точнее, но вроде бы нет смысла.
Такая же логика и для положительных чисел при округлении в верхнюю сторону (ceil).
Эмпирически подобранная логика в мат. библиотеке? Кхм… Почему-то вспомнился бородатый анекдот о военной кафедре и значении синуса, которое в военное время может достигать трех. Не обижайтесь только, это просто шутка конечно же. Удачи в дальнейшем совершенствовании вашей библиотеки.
В данном случае всегда будет ограничение точности. Оно может быть жестко задано, как сейчас, или быть привязанным к общей установленной точности вычисления. А экспериментально подобранная логика может быть уместна в любых библиотеках.
UFO just landed and posted this here
Нет, такого не планировалось. Погрешность еще и копится с каждой новой операцией. Не проще задать заведомо хороший запас точности? Тогда мелкие погрешности теряются при округлении результата до требуемой точности.
UFO just landed and posted this here
Так можно же все вычисления проводить с точностью до 100 знака, потом округлять до двух. Погрешность будет копиться около последних ста чисел после запятой и без проблем отрезаться.
Собственно как раз так использую.
Sign up to leave a comment.

Articles