Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
#1

Дайте денормализованное число типа double - C++

31.12.2014, 15:07. Просмотров 576. Ответов 11
Метки нет (Все метки)

Нужно для текста, число надо разобрать на мантиссу и порядок и снова собрать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.12.2014, 15:07
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Дайте денормализованное число типа double (C++):

Как из 4-х байт, составляющих число типа double, получить это число?
Как из 4-х байт, составляющих число типа double, получить это число? Пример:...

Разбить число типа double на 2 числа
Добрый день! Попалась мне такая задача - есть 2 интовые переменные, есть число...

Аргумент типа double несовместим с параметром типа double*
Функция function должна возвращать количество элементов массива, значение...

Аргумент типа double несовместим с параметром типа double
#include <iostream> #include <cmath> #include <math.h> using namespace std;...

Проверить, является ли число, записанное в переменную типа Double, иррациональным
Помогите. Нужно узнать, целое ли записанное в переменную double число, или же...

Как разделить переменую типа double на целое и дробное число ?
Как разделить переменую типа double на целое и дробное число ? Добавлено...

11
alptp
5 / 5 / 6
Регистрация: 15.10.2014
Сообщений: 18
31.12.2014, 19:17 #2
Десятичное число 155,625
Это число в нормализованном экспоненциальном виде : 1,55625∙10+2=1,55625∙exp10+2
Число 1,55625∙exp10+2 состоит из двух частей: мантиссы M=1.55625 и экспоненты exp10=+2
Если мантисса находится в диапазоне 1<=M<10, то число считается нормализованным.
Экспонента представлена основанием системы исчисления (в данном случае 10) и порядком (в данном случае +2).
Порядок экспоненты может иметь отрицательное значение, например число 0,0155625=1,55625∙exp10-2.

Это число в денормализованном экспоненциальном виде : 0,155625∙10+3=0,155625∙exp10+3
Число 0,155625∙exp10+3 состоит из двух частей: мантиссы M=0,155625 и экспоненты exp10=+3
Если мантисса находится в диапазоне 0,1<=M<1, то число считается денормализованным.
Экспонента представлена основанием системы исчисления (в данном случае 10) и порядком (в данном случае +3).
Порядок экспоненты может иметь отрицательное значение, например число 0,0155625=0,155625∙exp10-3.
2
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7002 / 3294 / 448
Регистрация: 04.12.2011
Сообщений: 9,113
Записей в блоге: 5
01.01.2015, 00:55 #3
Cmath/math.h
double frexp(double, int&)
http://www.cplusplus.com/reference/cmath/frexp/
С новым годом.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
01.01.2015, 07:51  [ТС] #4
Цитата Сообщение от alptp Посмотреть сообщение
0,0155625=1,55625∙exp10-2.
Это число в денормализованном экспоненциальном виде : 0,155625∙10+3=0,155625∙exp10+3
Ничего подобного. В double это число представляется как http://www.cyberforum.ru/cgi-bin/latex.cgi?1.2158203125*2^7, что вполне нормализовано.

Добавлено через 53 секунды
Цитата Сообщение от alptp Посмотреть сообщение
Если мантисса находится в диапазоне 0,1<=M<1, то число считается денормализованным.
Вообще то от ноля и оба неравенства строгие.

Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
http://www.cplusplus.com/reference/cmath/frexp/
Ничего не понял.
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
01.01.2015, 11:44 #5
Денормализованное IEEE 754 double - у которого порядок - минус 1023, например 0x1p-1023 (0x0008000000000000).
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
01.01.2015, 11:45  [ТС] #6
Цитата Сообщение от Somebody Посмотреть сообщение
например 0x1p-1023
Не распарсил запись.
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
01.01.2015, 11:57 #7
В C11 можно так вещественные числа писать.
1 * 2^(-1023)
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7002 / 3294 / 448
Регистрация: 04.12.2011
Сообщений: 9,113
Записей в блоге: 5
01.01.2015, 13:50 #8
Цитата Сообщение от taras atavin Посмотреть сообщение
Нужно для текста, число надо разобрать на мантиссу и порядок и снова собрать.
Цитата Сообщение от taras atavin Посмотреть сообщение
Ничего не понял.
это:
Цитата Сообщение от IGPIGP Посмотреть сообщение
double frexp(double, int *)
как разобрать на:
Цитата Сообщение от Somebody Посмотреть сообщение
... * 2^...
Что касается "собрать" то тут уже я не понял. Чем запись mant*2^ не устраивает? Можно в автомастерскую сдать, но там потеряют детали.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
01.01.2015, 14:45  [ТС] #9
Цитата Сообщение от Somebody Посмотреть сообщение
1 * 2^(-1023)
Так бы и писал 1e-1023.
0
Somebody
2799 / 1610 / 251
Регистрация: 03.12.2007
Сообщений: 4,211
Завершенные тесты: 3
01.01.2015, 17:59 #10
Цитата Сообщение от taras atavin Посмотреть сообщение
Так бы и писал 1e-1023.
Под 1e-1023 обычно понимается 10^-1023, а не на 2^-1023.
0
taras atavin
4204 / 1763 / 212
Регистрация: 24.11.2009
Сообщений: 27,565
01.01.2015, 18:03  [ТС] #11
Цитата Сообщение от Somebody Посмотреть сообщение
Под 1e-1023 обычно понимается 10^-1023, а не на 2^-1023.
А, ну да, прогнал. А что там означает двойку?

Добавлено через 1 минуту
Цитата Сообщение от IGPIGP Посмотреть сообщение
Что касается "собрать" то тут уже я не понял.
Ну собрать. Есть два отдельных данных, из них надо получить double.
0
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
7002 / 3294 / 448
Регистрация: 04.12.2011
Сообщений: 9,113
Записей в блоге: 5
01.01.2015, 21:23 #12
Цитата Сообщение от taras atavin Посмотреть сообщение
Есть два отдельных данных, из них надо получить double.
Если есть запись a*2^b то это набор операций и значит возвращается значение. Присвоив его переменной типа double получится double. Вполне приличной сборки, имхо.
0
01.01.2015, 21:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.01.2015, 21:23
Привет! Вот еще темы с решениями:

Как считывать только одно число типа double за один проход
Теперь измените тело цикла так, чтобы он считывал только одно число типа ...

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

Как проверить вводилось ли число (типа double или float) в консоль
Как проверить вводилось ли число (типа double или float) в консоль?

В заданном массиве типа double найти число с самой большой дробной частью
Помогите пожалуйста решить задачку. Описать массив типа double с количеством...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru