Привет У меня есть два вопроса:C - Unsigned долго долго удваивать на 32-битной машине
uint64_t против двойника, который имеет более высокий предел диапазона для покрытия положительных чисел?
Как конвертировать double в uint64_t, если требуется только целое число в двойном размере.
Непосредственное кастинг, по-видимому, не работает из-за того, как определено двойное.
Извините за любую путаницу, я говорю о 64-битном двойном в C на 32-битной машине.
Как для примера:
//operation for convertion I used:
double sampleRate = (
(union { double i; uint64_t sampleRate; })
{ .i = r23u.outputSampleRate}
).sampleRate;
//the following are printouts on command line
// double uint64_t
//printed by %.16llx %.16llx
outputSampleRate 0x41886a0000000000 0x41886a0000000000 sampleRate
//printed by %f %llu
outputSampleRate 51200000.000000 4722140757530509312 sampleRate
Таким образом, две цифры остаются теми же битовый шаблон, но при печати в качестве знаков после запятой, то uint64_t совершенно неправильно. Спасибо.
Вы говорите о 'double', как указано в C, или' double', как в ieee754 binary64 с плавающей запятой? – EOF
За # 2 вы пытались просто назначить двойную переменную? –
Что вы подразумеваете под «прямым кастингом, по-видимому, не работает»? Как это не работает? Приведите пример номера и того, что вы получили, когда вы его удвоили, и как вы изучили его значение. – FredK