ttutiki

Пользователь

Регистрация: 28.09.2013

Сообщения: 1816

Рейтинг: 618

ttutiki

Регистрация: 28.09.2013

Сообщения: 1816

Рейтинг: 618

Я не знаю как именно работают числа с плавающей точкой. Знаю только что они не точные. Я думал это относится только к дробной части, но кто шарит объясните мне как вот это получается?

-2.0000000000000004d + 2d = -4.4408920985006262E-16d

 

я думал возвращается -4, тему клоз с позором

Aerolife

Пользователь

Регистрация: 09.10.2012

Сообщения: 2009

Рейтинг: 1490

Aerolife

Регистрация: 09.10.2012

Сообщения: 2009

Рейтинг: 1490

ttutiki

Пользователь

Регистрация: 28.09.2013

Сообщения: 1816

Рейтинг: 618

ttutiki

Регистрация: 28.09.2013

Сообщения: 1816

Рейтинг: 618

Aerolife сказал(а):
Нажмите, чтобы раскрыть...

Спасибо что заставил прочитать меня эту портянку. Ответа на то почему при сложении -2 и 2 получается 4.4e-16 я там не нашел

Zacateca

Пользователь

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

Zacateca

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

ttutiki сказал(а):

Спасибо что заставил прочитать меня эту портянку. Ответа на то почему при сложении -2 и 2 получается 4.4e-16 я там не нашел

Нажмите, чтобы раскрыть...

Мантисса.

 

Если ты сложишь 2 и -2 ты получишь 0.

ЗАРАБОТОК В СЕТИ

Пользователь

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

ЗАРАБОТОК В СЕТИ

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

Zacateca сказал(а):

Мантисса.

 

Если ты сложишь 2 и -2 ты получишь 0.

Нажмите, чтобы раскрыть...

Объясни понятным языком, на конкретном примере, почему 19.99+40 в JS = 59.989999999999995 и почему нельзя сделать нормально

Zacateca

Пользователь

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

Zacateca

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

ЗАРАБОТОК В СЕТИ сказал(а):

Объясни понятным языком, на конкретном примере, почему 19.99+40 в JS = 59.989999999999995 и почему нельзя сделать нормально

Нажмите, чтобы раскрыть...

Могу на петухоне

 

import math

 

x = 19.99 + 20

print(math.frexp(19.99))

print(math.frexp(20))

print(math.frexp(x))

 

Вывод:

(0.6246875, 5)

(0.625, 5)

(0.6248437499999999, 6)

 

Где первое число - мантисса.

 

Понял? HAhaa.png?1616514247

 

ЗАРАБОТОК В СЕТИ

Пользователь

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

ЗАРАБОТОК В СЕТИ

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

Zacateca сказал(а):

Понял? HAhaa.png?1616514247

 

Нажмите, чтобы раскрыть...

Только то, что frexp так решил. Но почему он так решил и как отказаться от его решений - я не понял.

Zacateca

Пользователь

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

Zacateca

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

ЗАРАБОТОК В СЕТИ сказал(а):

Только то, что frexp так решил. Но почему он так решил и как отказаться от его решений - я не понял.

Нажмите, чтобы раскрыть...

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

Aerolife

Пользователь

Регистрация: 09.10.2012

Сообщения: 2009

Рейтинг: 1490

Aerolife

Регистрация: 09.10.2012

Сообщения: 2009

Рейтинг: 1490

 

ttutiki сказал(а):

Спасибо что заставил прочитать меня эту портянку. Ответа на то почему при сложении -2 и 2 получается 4.4e-16 я там не нашел

Нажмите, чтобы раскрыть...

а в чем вопрос)))

тебе вернуло все правильно, если не учитывать что это число с плавающей точкой, то ответ верный

или ты не знаешь что такое -16  -- это степень десятки 

 

-0.0000000000000044408920985006262

 

 

ttutiki

Пользователь

Регистрация: 28.09.2013

Сообщения: 1816

Рейтинг: 618

ttutiki

Регистрация: 28.09.2013

Сообщения: 1816

Рейтинг: 618

Aerolife сказал(а):

 

а в чем вопрос)))

тебе вернуло все правильно, если не учитывать что это число с плавающей точкой, то ответ верный

или ты не знаешь что такое -16  -- это степень десятки 

 

-0.0000000000000044408920985006262

 

 

Нажмите, чтобы раскрыть...

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

ЗАРАБОТОК В СЕТИ

Пользователь

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

ЗАРАБОТОК В СЕТИ

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

Zacateca сказал(а):

Можешь ручками посчитать. 

Нажмите, чтобы раскрыть...

Вот это и интересно, покажи на яблоках. Типа, надо разрезать целое яблоко на 99 равных частей (чтобы к 19 другим целым яблокам добавить еще 0.99 целого яблока). Для этого мы:

 

1) Режем яблоко на 2 части (1/2=0.5)

 

2) Режем 2 части поперек, получаем 4 (0.5/2=0.25)

 

3) 4 части режем пополам, получаем 8 (0.25/2=0.125)

 

И тп. В итоге получается, что на 99 равных частей не разрезать точно вообще никак?

 

Но почему? Покажи на яблоках.

Zacateca

Пользователь

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

Zacateca

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

ЗАРАБОТОК В СЕТИ сказал(а):

Вот это и интересно, покажи на яблоках. Типа, надо разрезать целое яблоко на 99 равных частей (чтобы к 19 другим целым яблокам добавить еще 0.99 целого яблока). Для этого мы:

 

1) Режем яблоко на 2 части (1/2=0.5)

 

2) Режем 2 части поперек, получаем 4 (0.5/2=0.25)

 

3) 4 части режем пополам, получаем 8 (0.25/2=0.125)

 

И тп. В итоге получается, что на 99 равных частей не разрезать точно вообще никак?

 

Но почему? Покажи на яблоках.

Нажмите, чтобы раскрыть...
дописал чтобы тебе было понятней

1) представляем число в виде мантиссы + степень основания 2

2) суммируем мантиссы (число m)

3) повторяем пункт #1 для полученного числа m

4) и вуаля. Получился хвостик. peepowew.gif?1620146312

 

Никакой магии под капотом.

 

Если ты применишь функцию nextafter, то можно убедиться, что следующее число будет верным 39.99.

То есть это просто ошибка точности из-за сложения чисел в виде мантисса+экспонента.

ЗАРАБОТОК В СЕТИ

Пользователь

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

ЗАРАБОТОК В СЕТИ

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

Zacateca сказал(а):

То есть это просто ошибка точности из-за сложения чисел в виде мантисса+экспонента.

Нажмите, чтобы раскрыть...

Ошибка, какой ужас!!! Надо срочно исправлять?

 

Почему-то ведь нет такого, значит это не ошибка, а так и есть на самом деле в математике?

Zacateca

Пользователь

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

Zacateca

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

ЗАРАБОТОК В СЕТИ сказал(а):

Ошибка, какой ужас!!! Надо срочно исправлять? Почему-то ведь нет такого, значит это не ошибка, а так и есть на самом деле в математике?

Нажмите, чтобы раскрыть...

по моему объяснению есть вопросы? HAhaa.png?1616514247

ЗАРАБОТОК В СЕТИ

Пользователь

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

ЗАРАБОТОК В СЕТИ

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

Zacateca сказал(а):

по моему объяснению есть вопросы? HAhaa.png?1616514247

Нажмите, чтобы раскрыть...

Komrad.png?1619500044 No sir

Zacateca

Пользователь

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

Zacateca

Регистрация: 22.12.2017

Сообщения: 34330

Рейтинг: 13380

Нарушения: 25

ЗАРАБОТОК В СЕТИ сказал(а):

В итоге получается, что на 99 равных частей не разрезать точно вообще никак?

Нажмите, чтобы раскрыть...

Достаточно взять весы и разрезать основываясь на массе. weSmart.png?1616514285

Aerolife

Пользователь

Регистрация: 09.10.2012

Сообщения: 2009

Рейтинг: 1490

Aerolife

Регистрация: 09.10.2012

Сообщения: 2009

Рейтинг: 1490

ЗАРАБОТОК В СЕТИ сказал(а):

Ошибка, какой ужас!!! Надо срочно исправлять?

Нажмите, чтобы раскрыть...

 

как, например, представить 22/7 в компьютере? dankpepe.png?1592046820

ЗАРАБОТОК В СЕТИ

Пользователь

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

ЗАРАБОТОК В СЕТИ

Регистрация: 26.11.2019

Сообщения: 8978

Рейтинг: 3706

Aerolife сказал(а):

 

как, например, представить 22/7 в компьютере? dankpepe.png?1592046820

Нажмите, чтобы раскрыть...

Это уже на уровень ниже процессора (бинарного представления), у оператора ПК не будет вопросов к процессору - все зависит от округления. Как и число ПИ.

LubitelKazahov

Пользователь

Регистрация: 05.09.2020

Сообщения: 817

Рейтинг: 416

LubitelKazahov

Регистрация: 05.09.2020

Сообщения: 817

Рейтинг: 416

akyJlaa

Пользователь

Регистрация: 11.10.2013

Сообщения: 168

Рейтинг: 28

akyJlaa

Регистрация: 11.10.2013

Сообщения: 168

Рейтинг: 28

img

Советую написать свой decimal 

Winter_Wyvern

Модератор технического раздела

Регистрация: 20.01.2022

Сообщения: 1059

Рейтинг: 3251

Winter_Wyvern

Регистрация: 20.01.2022

Сообщения: 1059

Рейтинг: 3251

img

Закрыто по просьбе ТС

Тема закрыта