iiv 29 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 1 minute ago, ViKo said: Правильно. Только разрядов лишних есть 53 - 32 = 21. То есть, добавить к своему числу 1 - 2^-21. ой, как я описался :) действительно 20 бит. Вот только я-то писал умножить на число 1-2^33, или 1-DBL_EPSILON*2^20. Добавлять нельзя. В крайнем случае можете добавить 0.5, если не хочется умножать, а надо добавлять. Для 32 бит и двойной точности - это тоже вариант. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 31 минуту назад, jcxz сказал: #define CEIL(x) (((double)(u64)(x) >= (x)) ? (u64)(x): (u64)(x) + 1) О, спасибо! Только на >= проверять не надо, поскольку обрезанное число больше быть не может. Не канает. Вызываются float функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 6 минут назад, ViKo сказал: О, спасибо! Только на >= проверять не надо, поскольку обрезанное число больше быть не может. Для чисел с плавающей точкой лучше стараться избегать проверок на ==. Потому как не известно в какую сторону идёт округление во всех промежуточных операциях. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба по моему, так как мантисса в дабле 10**308, а десятичных цифр 17, то где-то 10**290 писать ответ начал до того как 100500 ответов, а дописал только сейчас, извиняйте, если что Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба По моим экспериментам, для округления до не меньшего 32-битового целого достаточно добавить 1 - 2^-20 или 1 - 2^-21. Спасает именно то, что результирующее число должно укладываться в 32 бита. #define CEIL(x) ((uint32_t)((x) - 2E-20 + 1)) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MegaVolt 29 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 1 час назад, ViKo сказал: По моим экспериментам, для округления до не меньшего 32-битового целого достаточно добавить 1 - 2^-20 или 1 - 2^-21. Спасает именно то, что результирующее число должно укладываться в 32 бита. #define CEIL(x) ((uint32_t)((x) - 2E-20 + 1)) Не очень понятно как это будет работать если исходное число большое. Ну напрмер исходное число 10e20 мы пытаемся отнять от него число 2e-20 чтобы отобразить результат нам нужно уже 40 разрядов. А их у нас только 20. Как конкретно с этим обойдётся процессор нужно вникать отдельно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба В экспоненте 11 разрядов. Зато в мантиссе 53. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 2 часа назад, ViKo сказал: По моим экспериментам, для округления до не меньшего 32-битового целого достаточно добавить 1 - 2^-20 или 1 - 2^-21. Спасает именно то, что результирующее число должно укладываться в 32 бита. #define CEIL(x) ((uint32_t)((x) - 2E-20 + 1)) Из этого высказывания и выражения видно, что точка у вас - фиксированная. А значит - числа с плавающей точкой тут вообще не нужны. И всё можно сделать на u32 или u64. Не разводя лес на ровном месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба У меня простое желание - описывать время стандартными единицами измерения, секундами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megajohn 8 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 5 минут назад, ViKo сказал: У меня простое желание - описывать время стандартными единицами измерения, секундами. дык описывайте, простого 32битного числа хватит на 136 лет =60*60*24*365,25*136 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 243 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 1 час назад, ViKo сказал: У меня простое желание - описывать время стандартными единицами измерения, секундами. Дык описывайте: в старших 32 битах - секунды, в младших 32 - их доли. Итого 64 бита. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба Экие вы непонятливые. Мне годы ни к чему. Мне если нужно 5 мс, я и пишу 5e-3, а если нужно 20 нс, то пишу 20e-9. Оттого и данные с плавучими запятыми. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 11 minutes ago, ViKo said: Экие вы непонятливые. Мне годы ни к чему. Мне если нужно 5 мс, я и пишу 5e-3, а если нужно 20 нс, то пишу 20e-9. Оттого и данные с плавучими запятыми. Ой, не самое лучшее решение. Задавайте всё в ns (например), и пишите - 5 MS 20 NS перед этим сделать #define NS #define MKS *1000 #define MS *1000000 #define S *1000000000 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ViKo 1 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 5 минут назад, xvr сказал: Задавайте всё в ns (например), и пишите Так у меня давно сделано. Хотел "покрасивее". Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 8 13 мая, 2019 Опубликовано 13 мая, 2019 · Жалоба 2 hours ago, ViKo said: В экспоненте 11 разрядов. Зато в мантиссе 53. 11 разрядов, то есть влево можно сдвинуть на ~1000 позиций, ну еще хвост из 53, то есть младший бит на уровне 1<<950, на фоне этого 1<<32 глубокий 0 или я что-то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться