LINUX.ORG.RU
ФорумTalks

Объясните, что же не так с представлением чисел в памяти

 


0

1

Привет. Я читал что из-за сложностей преобразования из десятичной системы в двоичную возникают погрешности и другие странности, вроде отрицательного нуля или х*2=inf, а так-же, что размер числа ограничен размером машинного слова.

И может быть это всё нормально, но мне это кажется странным.

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

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

Я понимаю, это ресурсозатратно, но ведь это же необходимая жертва?

Там всё должно быть нормально.

но ведь это же необходимая жертва?

Нет. Ещё Крис Касперски писал, что x86 процы спроектированы максимально криво. Это означает, что потери начинались с проца, а потом уже стали криво писать программы. В идеале все программы могут работать в 3-5 раз быстрее, но это никому не выгодно...

xwicked ★★☆
()
Ответ на: комментарий от xwicked

но это никому не выгодно...

Нифигасе не выгодно, как минимум бы если так все просто, нашлись бы молодые, зубастые, которые бы выгрызли себе долю рынка за счет «прямых» процессоров. Тем более сейчас уже далеко не винтеловские времена, скомпилировать под что-то новое готовы даже крупные софтопроизводители.

praseodim ★★★★★
()
Последнее исправление: praseodim (всего исправлений: 1)
Ответ на: комментарий от Harald

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

Попытки кого-то оказаться лучше как-то сдуваются. Если нужна универсальность рулит и педалит таки x86.

К примеру, сколько с ARM носятся, одно время даже хостеры стали vps на arm предлагать, ноуты на arm - и что-то «не взлетает», даже наоборот мода на vps и ноуты-арм стала проходить толком не начавшись. В тоже время, у них все-таки есть своя ниша на планшетах, смартфонах и подобных устройствах.

А если нужно до предела ускорить какую-то конкретную задачу давно уже научились делать процы специально под нее. К примеру асики для биткоинов.

praseodim ★★★★★
()
Ответ на: комментарий от Harald

Так были они же. Никому оказались не нужны на практике.

И в каком-то современном проце есть встроенная поддержка decimal, что позволяет достаточно просто организовать decimal произвольной длины программно. Кажется, у IBM.

i-rinat ★★★★★
()
Ответ на: комментарий от i-rinat

И в каком-то современном проце есть встроенная поддержка decimal, что позволяет достаточно просто организовать decimal произвольной длины программно. Кажется, у IBM.

Встроенная поддержка decimal «куплена из совка»: «В 1967 году на выставке в Лондоне, где демонстрировалась “МИР-1”, она была куплена американской фирмой IBM - крупнейшей в США, являющейся поставщиком почти 80% вычислительной техники для всего капиталистического мира. Это была первая (и, к сожалению, последняя) покупка советской электронной машины американской кампанией» ©.

quickquest ★★★★★
()
Ответ на: комментарий от xwicked

В подтверждении своих слов:

У нас в стране мы фактически вынуждены быть монополистами — никто все равно, кроме нас, не может сделать совместимый процессор. Это очень трудно — если прочтете все документы, все равно работать как надо не будет. Мы же знаем все закоулки, причем двух архитектур — Intel х86 и SPARC. Intel, кстати — очень сложная архитектура, потому что, как я все время шучу, она была не разработана, она «случилась». Там мусора, еще с 88-й модели — знаете сколько слоев? Изучить этот весь мусор — ну никак не меньше трех лет, а все документы, что публикуются, очень мутно составлены. Пока мы единственные в стране, кто умеет делать Intel-совместимые процессоры.

Из интервью Бориса Бабаяна, главного архитектора наших процессоров. По-моему шикарно! Я ещё читал инфу или в этой или в другой статье, что в наших процах нет погрешности вычислений с плавающей точкой.

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от quickquest

Встроенная поддержка decimal «куплена из совка»: «В 1967 году на выставке в Лондоне, где демонстрировалась “МИР-1”

1. «The IBM 1401 is a variable wordlength decimal computer that was announced by IBM on October 5, 1959» ©

2. «В 1968 году машина МИР модернизирована и получила название МИР-1» ©

Уууупс.

redgremlin ★★★★★
()
Ответ на: комментарий от xwicked

в наших процах нет погрешности вычислений с плавающей точкой

Facepalm. Погрешность — она не от процессора зависит (ну ладно, fdiv bug никто не отменял, но shit happens, это чисто инженерный косяк) и страны его производства, а от неумолимых законов математики.

redgremlin ★★★★★
()
Ответ на: комментарий от redgremlin

Facepalm. Погрешность — она не от процессора зависит (ну ладно, fdiv bug никто не отменял, но shit happens, это чисто инженерный косяк) и страны его производства, а от неумолимых законов математики.

Я может неправильно выразился:

2.0 - 1.1 = 0.8999999999999999

Вот этого нет, типа все числа получаюся ровные.

xwicked ★★☆
()
Ответ на: комментарий от xwicked

Это возможно только ценой сильного проседани скорости за счет использования десятичной записи чисел в памяти

cvs-255 ★★★★★
()
Ответ на: комментарий от cvs-255

Это возможно только ценой сильного проседани скорости за счет использования десятичной записи чисел в памяти

ВОт ты сам инженер? Ты понимаешь что такое мантиссы и как всё это организовано? Может нас налюбливают, а мы и не можем проверить?... Верим ББ на слово...

xwicked ★★☆
()
Ответ на: комментарий от RazrFalcon

Но зачем?

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

xwicked ★★☆
()
Ответ на: комментарий от xwicked

Разве текущая реализация не самая быстрая? В любом случае выбора нет: или страдать или тормоза. Проц-то не пропатчишь.

RazrFalcon ★★★★★
()
Ответ на: комментарий от RazrFalcon

Разве текущая реализация не самая быстрая?

Если верить инженерам МЦСТ то даже эта реализация,которая может быть не самой быстрой, так она ещё и криво реализована прямо в интеловском проце с тонной шлака, возможно даже обфусцированно...

xwicked ★★☆
()
Ответ на: комментарий от xwicked

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

Harald ★★★★★
()
Ответ на: комментарий от Harald

...так что всё пучком...

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

xwicked ★★☆
()
Ответ на: комментарий от xwicked

хотя вот ща вспомнил, что ЭНИАК был десятичным, а не двоичным, так что можешь врубать свою паранойю на полную мощность :)

Harald ★★★★★
()
Ответ на: комментарий от cvs-255

этого мало, еще надо как минимум точку заякорить

t184256 ★★★★★
()
Ответ на: комментарий от xwicked

Я знаю, как организована double в памяти. И знаю, что аппаратного вычисления decimal вещественных чисел нет на x86 и arm, и почти везде за исключением специализированных систем типа тех, что в калькуляторах. А значит придется программно все вычислять

cvs-255 ★★★★★
()
Ответ на: комментарий от Harald

твоя теория заговора несостоятельна
Harald ★★★★★ (12.06.2018 19:02:09)Юрист-фанатик1

Если что, я цитировал наших инженеров МЦСТ, включая главного конструктора. Ты фанатично веришь в любовь ББ ко всем людям? Похвально.

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)
Ответ на: комментарий от RazrFalcon

Очередной свидетель масонского заговора?
RazrFalcon ★★★★ (12.06.2018 19:49:28)Юрист-фанатик2

Я привожу доводы других более авторитетных «сектантов». Вам платят за безоговорочную веру в ББ, признавайтесь? Откуда вы такие берётесь?

xwicked ★★☆
()
Ответ на: комментарий от RazrFalcon

Фанатик - ещё ладно, но при чём тут юрист?

Я пока сомневаюсь ты действительно фанатик и всё на веру воспринимаешь или всё таки юрист(е***й, представитель ББ).

xwicked ★★☆
()
Ответ на: комментарий от Harald

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

В 60-е и 70-е годы не было единого стандарта представления чисел с плавающей запятой, способов округления, арифметических операций. В результате программы были крайне не портабельны. Но еще большей проблемой было то, что у разных компьютеров были свои «странности» и их нужно было знать и учитывать в программе. Например, разница двух не равных чисел возвращала ноль. В результате выражения «X=Y» и «X-Y=0» вступали в противоречие. Умельцы обходили эту проблему очень хитрыми трюками, например, делали присваивание «X=(X-X)+X» перед операциями умножения и деления, чтобы избежать проблем.

Это что ещё за «странности» реализации алгоритмов? Кроме не стандартизации была кривая реализация имеющихся алгоритмов, о чём инженеры МЦСТ и говорят, что там тонны шлака в ПРОЦЕССОРАХ, а не в компиляторах.
Это уже намекает на то, что МОЖНО сделать нормальный алгоритм работы с числами с плавающей запятой.

xwicked ★★☆
()
Последнее исправление: xwicked (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.