Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
3 / 3 / 0
Регистрация: 15.12.2012
Сообщений: 94

64 bit double to 80 bit

05.09.2015, 15:01. Показов 2533. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть double переменная надо сделать из неё 80 - битную переменную, в интернете нашёл только этот асмовский код но он не работает.
C++
1
2
3
4
5
6
7
void ConvertDoubleToLongDouble(double value, unsigned char result[10]) {
    __asm {
        fld value;
        mov ebx, result;
        fstp tbyte ptr [ebx];
    }
}
вот такая ошибка на последней строчке выскакивает:
Миниатюры
64 bit double to 80 bit  
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
05.09.2015, 15:01
Ответы с готовыми решениями:

Загрузка 32 bit DLL в 64 bit DLL
Доброго дня, в своем предыдущем посту я озадачивался вопросом о том, как можно прикрутить DLL файл в проект visual studio, для доступа...

16 bit не компилируется
Здравствуйте! Написал программу #include <iostream> int main() { using namespace std; cout << hex;...

Формирование 8-bit bitmap
Здравствуйте, помогите решить проблему, дело в том что при создании bmp файла у меня должна происходить запись значений массива на каждый...

28
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.09.2015, 17:03
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от emmure Посмотреть сообщение
Есть double переменная надо сделать из неё 80 - битную переменную, в интернете нашёл только этот асмовский код но он не работает
Твоя задача в итоге какая? Взять переменную типа double (64 бита), сконвертировать её в long double (80 бит) и итоговые 80 бит скопировать в массив из 10 char'ов?
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
05.09.2015, 17:06
Цитата Сообщение от Evg Посмотреть сообщение
long double (80 бит)
у меня он в GCC - 16 байт также как и __float128
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.09.2015, 17:10
Лучший ответ Сообщение было отмечено emmure как решение

Решение

C
#include <stdio.h>
#include <string.h>
 
void ConvertDoubleToLongDouble (double value, unsigned char result[10])
{
  long double ld = value;
  memcpy (result, &ld, 10);
}
 
int main (void)
{
  unsigned char str[10];
  int i;
 
  ConvertDoubleToLongDouble (1.2345, str);
  for (i = 0; i < 10; i++)
    printf ("%02x ", str[i]);
  printf ("\n");
}
Добавлено через 1 минуту
Цитата Сообщение от sfinexer Посмотреть сообщение
у меня он в GCC - 16 байт также как и __float128
Покажи выдачу по "gcc -v"
1
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
05.09.2015, 17:16
Цитата Сообщение от Evg Посмотреть сообщение
Покажи выдачу по "gcc -v"
А как ее в файл записать? gcc -v ->1 нехочет в первый файл записываться...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.09.2015, 17:18
Я так понимаю, что у тебя просто компилятор под 64-битный intel (x86_64). На нём long double имеет 80 значащих бит (10 байт) + 6 байт пустышек, чтобы иметь в сумме 16-байтный sizeof и 16-байтное выравнивание

C
#include <stdio.h>
 
int main (void)
{
  long double ld = -187456348756437563476.234539845734895734857348579347534897L;
  unsigned char *s = (unsigned char*) &ld;
  int i;
 
  for (i = 0; i < sizeof (long double); i++)
    printf ("%02x ", s[i]);
  printf ("\n");
}
Code
$ gcc t.c
$ ./a.exe
85 2f 73 1f c0 ab 97 a2 42 c0 00 00 00 00 00 00
Видим, что последние 6 байт по сути дела не используются. Т.е. копирование 10 байт из переменной типа long double и будет тем, что ты хочешь. Правда не совсем понимаю, зачем, ну это уже не моё дело

Добавлено через 38 секунд
Цитата Сообщение от sfinexer Посмотреть сообщение
А как ее в файл записать?
Перенаправить в файл - "gcc -v > a.txt"

А с экрана скопировать не можешь?
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
05.09.2015, 17:32
Только так...
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=C:/TDM-GCC-64/bin/../libexec/gcc/x86_64-w64-mingw32/5.1.0/lt
o-wrapper.exe
Target: x86_64-w64-mingw32
Configured with: ../../../src/gcc-5.1.0/configure --build=x86_64-w64-mingw32 --e
nable-targets=all --enable-languages=ada,c,c++,fortran,lto,objc,obj-c++ --enable
-libgomp --enable-lto --enable-graphite --enable-cxx-flags=-DWINPTHREAD_STATIC -
-disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-libstdcxx-d
ebug --enable-threads=posix --enable-version-specific-runtime-libs --enable-full
y-dynamic-string --enable-libstdcxx-threads --enable-libstdcxx-time --with-gnu-l
d --disable-werror --disable-nls --disable-win32-registry --prefix=/mingw64tdm -
-with-local-prefix=/mingw64tdm --with-pkgversion=tdm64-1 --with-bugurl=http://td
m-gcc.tdragon.net/bugs
Thread model: posix
gcc version 5.1.0 (tdm64-1)

Добавлено через 4 минуты
Evg, но тут мне так кажется чтото нетак если честно
Такое чувство что он это тянет из системы. Но для моиз задач GCC ненадо установливать и прописывать разные пути к либам, а данный вывод видимо гдето остался в системе после попыток самому скомпилировать GCC

Добавлено через 1 минуту
Так ка я никогда компилятор не установливаю и не прописываю пути в параметрах PATH и прочие
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.09.2015, 17:37
Цитата Сообщение от sfinexer Посмотреть сообщение
Evg, но тут мне так кажется чтото нетак если честно
Я просто хотел выяснить, с какими настройками работает компилятор. Т.е. моё предположение оправдалось. Код из поста #23 делает именно то, что тебе нужно. Если я правильно понял, что тебе нужно. В посте #21 я описал своё понимание проблемы. На него не было внятного подтверждения или опровержения. Как вариант тебе нужно более чётко сформулировать задачу

Добавлено через 1 минуту
Итоговая сентенция в любом случае такая - никакие ассемблерные вставки не нужны. Всё можно написать на чистом Си. Лишь бы понимать, что ты хочешь
0
-3 / 11 / 5
Регистрация: 22.01.2011
Сообщений: 201
05.09.2015, 17:39
Задача не моя)
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.9.2-10ubuntu13' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,o bj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.9.2
Есть еще так,
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
05.09.2015, 17:56
Цитата Сообщение от sfinexer Посмотреть сообщение
Задача не моя)
Пардон, перепутал тебя с ТС'ом

Цитата Сообщение от sfinexer Посмотреть сообщение
Есть еще так
Да это в общем-то пофиг. Код из поста #23 будет одинаково работать как на 32-битных, так и на 64-битных intel'ах , хоть под виндой, хоть под линуксом. Принципиальная разница только в том, что переменная long double будет иметь sizoef либо 12 (на i386), либо 16 (на x86_64). В обоих случаях у него значащими являются только младшие 10 байт (80 бит), всё остальное - используется только для выравнивания
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.09.2015, 17:56
Помогаю со студенческими работами здесь

Unsigned integer 24 bit
Как можно объявить беззнаковый integer размером в 24 бита? Если я объявлю его как битовое поле в структуре, например так: struct...

XOR 32 bit key
Здравствуйте! Подскажите, пожалуйста. Есть чаровский массив, т.е каждый символ 1 байт, есть ключ 32 бита или 4 байта, как зашифровать...

CRC Checksum 8 bit
Нужна простая консольная программа, которая при перетаскивании файла на неё посчитает CRC всех байт. Как реализовать? Что-то ничего не...

LSB (Least Significant Bit)
Добрый вечер! Есть у меня лабораторное задание реализовать стенографию. И я не понимаю некоторые моменты. Какую информацию несёт эта...

Декодировать GSM 7 bit
Ребят , может у кого то завалялся исходник декодера для GSM 7 BIT ? Есть gsm - модем и в гипертерминале , сообщение о балансе счета...


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

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru