nicmicola 0 30 ноября, 2018 Опубликовано 30 ноября, 2018 · Жалоба В руководстве Microchip 00526 дана математика с данными float. В конце дано тестирование ее. Я попытался применить ее не пошло, перешел к тестированию и вот что у меня вышло. call loadAB ; result of subtracting ACCb(EXPb)-ACCa(EXPa)->ACCb(EXPb) = 0x01FF(4) - 0x7FFF(6) call F_sub ; Here Accb = 7F7F, EXPb = 06 (0x01FF*2^4) - (0x7FFF*2^6) = 0x7F7F*2^6 = 2088896 8176 - 2097088 = -2088912 ; call loadAB ; result of multiplying ACCb(EXPb) * ACCa(EXPa)->ACCb(EXPb) = 0x01FF(4) * 0x7FFF(6) call F_mpy ; Here ACCb = FF7E, EXPb = 12 (0x01FF*2^4) * (0x7FFF*2^6) = 0xFF7E*2^12 = 267902976 8176 * 2097088 = 17145791488 ; call loadAB ; result of dividing ACCb(EXPb) / ACCa(EXPa)->ACCb(EXPb) with = 0x01FF(4) / 0x7FFF(6) call F_div ; remainder in ACCc. Here ACCb =4000, EXPb = FA (same as -6) ; ; & the remainder ACCc = 003F (0x01FF*2^4) / (0x7FFF*2^6) = 0x4000*2^6 = 1048576 8176 / 2097088 = 0.0038987395855586 Что я делаю не правильно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 1 декабря, 2018 Опубликовано 1 декабря, 2018 · Жалоба Во первых, это 544-ая аппнота, а не 526-ая: http://ww1.microchip.com/downloads/en/AppNotes/00544d.pdf Во вторых, в каком формате представлен флоат в аппноте? В стандартном виде в нем есть неявная целая часть равная 1. То есть мантисса выглядит как знак/точка/дробная часть, на самом деле это +/-1.(дробная часть). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 1 декабря, 2018 Опубликовано 1 декабря, 2018 · Жалоба 23 hours ago, nicmicola said: call loadAB ; result of dividing ACCb(EXPb) / ACCa(EXPa)->ACCb(EXPb) with = 0x01FF(4) / 0x7FFF(6) call F_div ; remainder in ACCc. Here ACCb =4000, EXPb = FA (same as -6) ; ; & the remainder ACCc = 003F (0x01FF*2^4) / (0x7FFF*2^6) = 0x4000*2^6 = 1048576 8176 / 2097088 = 0.0038987395855586 Что я делаю не правильно В догон, если не разбираться с форматом (0x01FF*2^4) / (0x7FFF*2^6) = 0x4000*2^-6 = 1048576 = 0,25*0,015625 = 0,00390625 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nicmicola 0 1 декабря, 2018 Опубликовано 1 декабря, 2018 (изменено) · Жалоба Здравия желаю всем и персонально my504. Я открыл эту тему не для дискуссий, а с желанием научиться пользоваться процедурой из этого пакета. Если вас не сильно затруднит то пожалуйста растолкуйте как пользоваться этой процедурой. FLOAT.ASM 00526.rar Изменено 1 декабря, 2018 пользователем nicmicola Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 1 декабря, 2018 Опубликовано 1 декабря, 2018 · Жалоба Чтобы разобраться как ей пользоваться, нужно разобрать КОД САМОЙ ФУНКЦИИ. Собственно там все просто. При суммировании или вычитании приводится порядок одного из аргументов ко второму, а затем делают обычную арифметику с мантиссами. При умножении и делении перемножают или делят мантиссы, а порядки либо суммируют (при умножении), либо вычитают из порядка делимого порядок делителя при делении. Ну и нужно понимать что из себя представляет дробное двоичное число с фиксированной точкой, чтобы понимать как представить результат в десятичном виде. Что из мною сказанного Вам непонятно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
my504 2 1 декабря, 2018 Опубликовано 1 декабря, 2018 · Жалоба Читайте про микрочиповский формат float24: http://ww1.microchip.com/downloads/en/AppNotes/00575.pdf Выглядит как xxxxxxxx s.xxxxxxx xxxxxxxx Старший байт - это порядок со смещением на 127(экспонента) Средний и младший байт - это нормализованная мантисса, где s- это знак, следующие за точкой разряды - это дробная часть, а единица целой части неявная. То есть мантисса вида 0x01FF будет равна (1+(511/32768))=1,01559448 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
nicmicola 0 2 декабря, 2018 Опубликовано 2 декабря, 2018 · Жалоба 13 hours ago, my504 said: Читайте про микрочиповский формат float24: http://ww1.microchip.com/downloads/en/AppNotes/00575.pdf Выглядит как xxxxxxxx s.xxxxxxx xxxxxxxx Старший байт - это порядок со смещением на 127(экспонента) Средний и младший байт - это нормализованная мантисса, где s- это знак, следующие за точкой разряды - это дробная часть, а единица целой части неявная. То есть мантисса вида 0x01FF будет равна (1+(511/32768))=1,01559448 Большое спасибо вам за толковое объяснение. Думаю и другим будет полезно делающим серьезные вычисления на ассемблере. Большое спасибо вам за толковое объяснение. Думаю и другим будет полезно делающим серьезные вычисления на ассемблере. Еще раз спасибо!!!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться