Форум программистов, компьютерный форум CyberForum.ru

Разрядность переменных или каким образом так точно считает калькулятор Windows - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ И снова о ферзях http://www.cyberforum.ru/cpp-beginners/thread606321.html
Здравствуйте уважаемые форумчане. Задача звучит так: Найти возможные способы для удара ферзем максимального количества вражеских фигур за N проходов исходя из определенного задаваемого положения вражеских фигур, не изменяющих своего положения. Определить кратчайшие. С меня пиво=)
C++ Связанные списки Составить программу, работающую со связанными списками. Мы будем рассматривать связанный список как объект, содержащий связанный список данных и операций (методов), которые вы можете с ними выполнять. Связанный список данных состоит из указателей на начало («голову») и конец («хвост») связанного списка (в нашем примере из-за его гибкости используется двунаправленный связанный список). Каждый... http://www.cyberforum.ru/cpp-beginners/thread606303.html
C++ Найти индекс первого элемента, превосходяшего среднее арифметическое всех элементов матрицы
Взаданой матрице Δ(N,N) найти индекс первого элемента превосходяшего среднее арифметическое всех элементов матрици. Элементы матриц просматривать слева на право и сверху вниз .
Написать программу, которая считывает текст из файла и записывает в другой файл C++
Написать программу, которая считывает текст из файла и записывает в другой файл все слова, встречающиеся в тексте несколько раз.
C++ Структура: вывести на экран информацию о результатах прыжков в длину, отсортированную в порядке возрастания мест http://www.cyberforum.ru/cpp-beginners/thread606222.html
В одном файле хранятся сведения об участниках соревнований: номер участника, ФИО, страна, во 2 файле сведения об итогах соревнований: номер участника, вид соревнований, дата, место. вывести на экран информацию о результатах прыжков в длину (номер участника, ФИО, страна, место), отсортированную в порядке возрастания мест.
C++ Программа, считывающая текст из файла Написать программу, которая считывает текст из файла и записывает в другой файл встречающиеся в тексте числа, из отрезка и находит их среднее арифметическое. подробнее

Показать сообщение отдельно
UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
15.06.2012, 16:24     Разрядность переменных или каким образом так точно считает калькулятор Windows
Цитата Сообщение от -=MASTER=- Посмотреть сообщение
мусор во всю возможную длинну этого float
Никакого мусора. У нас каждый тип данных записывается в определенное число байтов. Флоат, в частности, в 4-х байтах. 4 Байта=32 бита. Первый разряд -- флаговый (знак). Остается 31. Вот 32-й разряд (не считая флагового) уже не влезет, и потому точность типа float ограничивается 7-ю десятичными знаками (надо посмотреть, как представляются числа в типе float, не помню..).
В калькуляторе, похоже, либо используются типы с большим количеством разрядов, либо длинная арифметика (представление числа в виде массива).

Добавлено через 23 минуты
Ага, нашел. Тип 32 бита типа float распределяются так: 1-й -- знаковый (ну, точнее, номерация идет с конца и до нуля, потому по кошерному он будет называться 31-м, но я буду писать по такой номерации). Следующие 8 битов -- экспонента. Оставшиеся 23 -- дробная часть числа, полученного многократным делением\умножением на 2 исходного, целая часть которого - 1. Итого, число представляется как (-1)^sign * frac * 2^exp.
К примеру, число -11.25 будет представляться так:
Первый бит 1 -- число отрицательное. Теперь делим его на 2, пока не станет целая часть 1. 11.25=5.625*2=2.8125*4=1.40625*8. Дробная часть числа 1.40625 -- 0.40625. Ее и записываем в те 23 разряда. Далее, 8=2^3, добавляем к этой тройке 127 (этому тоже есть логическое обьяснение), получаем 130. Переводим в двоичную систему, получаем 10000010. Вот это пишем в те 8 бит.
Итого, какие же числа мы можем хранить в float'е?
По порядку(приблизительно) -- от 2^-127, до 2^+128. 2^10=1024, это примерно 10^3
Итого, по порядку -- от 10^-36 до 10^36. По настоящему, я считал грубо, и там не 36, а 38.
И с какой точностью мы можем хранить значущую часть числа? У нас 23 разряда. Ошибка будет в 24-м разряде. (1/2)^24=((1/2)^10)^2.4=(1/10)^7.2 -- примерно 1/10^7. Итого, флоат хранит 7 значущих цифр.

Добавлено через 10 минут
Таким образом, по аналогии, мы можем оперировать числами вида (пятизначное число)*10^(много-много), при этом мы вроде как оперируем очень большими числами, но на самом деле все операции происходят с пятизначными, и большой точности мы не получим.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru