Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
Masson1848
98 / 106 / 83
Регистрация: 03.10.2017
Сообщений: 366
Завершенные тесты: 2
1

Длина дробной части

17.10.2018, 18:32. Просмотров 1601. Ответов 10
Метки нет (Все метки)

У нас есть вещественная чиселка
Digit dq 123,456
Как узнать количество циферок после запятой, то бишь должны получить ответ 3. Спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.10.2018, 18:32
Ответы с готовыми решениями:

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

Даны две переменные, в первой строка, во второй длина строки, 100 - max длина, строки. Что такое dup('$') ?
string db 100 stringlen db ?,100 dup('$')

Длина массива
array db 9, 2, 3, 7, 3, 2, 4 len dw $-array Пожалуйста можете очень подробно объяснить именно...

Длина строки
Есть код который вычисляет длину введенной с клавиатуры строки, когда я ввожу asd он почему выводит...

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

10
ФедосеевПавел
Модератор
3762 / 2114 / 862
Регистрация: 01.02.2015
Сообщений: 7,019
17.10.2018, 18:37 2
Никак. При выводе на экран сами задаёте количество выводимых чисел.

Единственно, можете при умножении на 10 и после выделения целой части проверять, что остался ноль.
1
Masson1848
98 / 106 / 83
Регистрация: 03.10.2017
Сообщений: 366
Завершенные тесты: 2
17.10.2018, 18:44  [ТС] 3
ФедосеевПавел, если загружаем число в сопроцессорч то оно меняет свой вид.
123,1
А записвапет: 123,09999
Я что-то делаю не так?
0
ФедосеевПавел
Модератор
3762 / 2114 / 862
Регистрация: 01.02.2015
Сообщений: 7,019
17.10.2018, 18:48 4
Лучший ответ Сообщение было отмечено Mikl___ как решение

Решение

Все числа хранятся в двоичной системе счисления и большинство десятичных дробей не имеют точного двоичного представления.
Попробуйте на листе бумаги выполнить преобразование дроби в двоичную систему счисления.
1
Mikl___
Автор FAQ
11896 / 6184 / 572
Регистрация: 11.11.2010
Сообщений: 11,195
18.10.2018, 17:00 5
Лучший ответ Сообщение было отмечено R71MT как решение

Решение

Masson1848,
Цитата Сообщение от Masson1848 Посмотреть сообщение
У нас есть вещественная чиселка
Digit dq 123,456
dq означает, что для представления числа будет использовано 64 разряда, из этих 64=1+11+52 1 разряд под знак, 11 разрядов под степень и 52 разряда под мантиссу.
вычисляем степень log2(123,456)=6,9436869515971
123,456=(-1)знак х 2степень х 1,мантисса
степень в смещенном коде = 6+1023=102910=100.0000.01012
52(разрядов в мантиссе)-6(степень)=46
мантисса = 246х123,456=8687443681197686,784~8687443681197687=1,1110.1101.1101.0010.1111.0001.1010.1001.1111.1011.1110.0111.01112
 знакстепеньмантисса
bin0100000001011110110111010010111100011010100111111011111001110111
hex405EDD2F1A9FBE77
Вот здесь подробно разжёвано Представление чисел с плавающей запятой
4
Mikl___
Автор FAQ
11896 / 6184 / 572
Регистрация: 11.11.2010
Сообщений: 11,195
20.10.2018, 04:18 6
Чтобы не плодить темы. В разделе "Информатика" попался на глаза топик Погрешность числа в 32-разрядном формате с плавающей запятой Стало интересно. Попробую решить
определить погрешность числа 2,0x1038 в 32-разрядном формате с плавающей запятой
На всякий случай выкладываю табличку из "Электронного учебника", видно, что число еще входит в диапазон REAL4
Количество
бит
ТипПоле
знака
Поле
порядка
КонстантаПоле
мантиссы
Диапазон принимаемых значений
32REAL41 бит8 бит27-1=12723 битаОт +/- 1,18*10-38 до 3,4*1038
определяем степень log2(2 x 1038)=127,2332676
степень в смещенном виде 127+127=254=1111.11102
23(разряда в мантиссе)-127(степень)=-104
мантисса = 2-104х 2,0E(+38)=9,8607613152626475676466070660348Е(-33) х 2,0Е(+38)=
9,8607613152626475676466070660348Е(-32) х 1,0Е(+38)=
9860761,3152626475676466070660348=96769916=1,001.0110.0111.0110.1001.10012
собираю число
 знакстепеньмантисса
bin01111111000101100111011010011001
hex
7
F
1
67699
разбираю это число обратно 96769916 x 2127-23=9860761 x 20282409603651670423947251286016=
=1,9999999360571384930131252153835e+38
и тогда ошибка между числом и его отображением составит
2,0e(+38)-1,9999999360571384930131252153835e(+38)=6,394286150698687478461653581824х1030
Охренеть!
4
ФедосеевПавел
Модератор
3762 / 2114 / 862
Регистрация: 01.02.2015
Сообщений: 7,019
20.10.2018, 09:44 7
В процентах от числа - не много. Но ожидаемо. Можно оценить относительную погрешность. Мантисса 23 бита, плюс 1 бит (который не записывается) и погрешность в последнем разряде
1/224+1=1/(3,3*107)=3*10-8.
А в процентах это 3*10-6%.

Т.е. при коротких расчётах вполне удовлетворительно. Кстати в ПЛК при расчётах используют именно тип single (Real4), т.к. не предполагается накопление ошибки.
2
Mikl___
Автор FAQ
11896 / 6184 / 572
Регистрация: 11.11.2010
Сообщений: 11,195
20.10.2018, 10:13 8
ФедосеевПавел,
по поводу
плюс 1 бит (который не записывается)
Это заблуждение, записывается, просто попадает в те биты, где находится степень, а при расчете степень формируется не "степень плюс 127", а "скрытая единица"+степень+126. Тогда в эту систему вписывается и представление нуля, и представление сверхмалых "денормализованных" чисел в стандарте IEEE 754

по поводу погрешности. ФедосеевПавел, спасибо. Быстрый расчет и совпадает с моим
2,0Е(+38) х 3,0Е(-8)=6,0Е(+30)
2
Constantin Cat
1974 / 1062 / 367
Регистрация: 28.02.2015
Сообщений: 2,337
Завершенные тесты: 1
21.10.2018, 02:56 9
Mikl___, ФедосеевПавел, Знание того как, что и по чем, не освобождает Вас от возможностей компилятора. Это никак не сравнится с программированием ферритового куба - аналог ПЗУ.


Добавлено через 3 минуты
Mikl___, Вы знакомы с этим кубом?
1
Mikl___
Автор FAQ
11896 / 6184 / 572
Регистрация: 11.11.2010
Сообщений: 11,195
21.10.2018, 03:05 10
Constantin Cat,
так знания и добывались путем reverse engineering, то есть сперва компилятору скармливается строка
pi dq 3.1415926535897932384626433832795 а потом пытаешься разобраться что же получено в результате компиляции. Либо пытаешься поставить себя на место компилятора постоянно задавая вопросы типа "А как бы поступил ты решая такую же задачу" и параллельно ползаешь по интернету, чтобы найти недостающие пазлы

С кубом нет, но с ферритовой памятью приходилось сталкиваться, только это скорее не ПЗУ, а ДОЗУ (долговременная/энергонезависимая ОЗУ), так как можно не только читать, но и писать в такую память. В качестве ПЗУ раньше применялись диодные сборки или загрузчик с перфоленты
1
Constantin Cat
1974 / 1062 / 367
Регистрация: 28.02.2015
Сообщений: 2,337
Завершенные тесты: 1
21.10.2018, 03:17 11
Цитата Сообщение от Mikl___ Посмотреть сообщение
так знания и добывались
Вы это и скажите pcmax, он думает, что все на халяву.

Цитата Сообщение от Constantin Cat Посмотреть сообщение
программированием ферритового куба
проволочку тягать, это не философии жевать.
0
21.10.2018, 03:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2018, 03:17

Регистр cx и длина строки
Доброго времени суток. Не могу понять почему выдает ошибку в строках 27 и 30. Пишет, что регистр...

Ассемблер - длина файла
Как найти длину файла в ассемблере. Не размер, а именно длину. То есть сколько ячеек памяти...

Дано положительное вещественное число Х. Определить, равна ли первая цифра его дробной части последней цифре целой части
Дано положительное вещественное число Х. Определить, равна ли первая цифра его дробной части...


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

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

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