Как вы печатаете двойной stream, чтобы при чтении в нем вы не теряли точность? Я пытался: std::stringstream ss; double v = 0.1 * 0.1; ss << std::setprecision(std::numeric_limits::digits10) << v <> u; std::cout << "precision " << ((u == v) ? "retained" : "lost") << std::endl; Это не сработало, как я ожидал. Но я могу увеличить […]
При использовании двойного или плавающего типа данных в приложении iPhone у меня возникают проблемы с сравнениями «> =» и « = 4.2», является ложным вместо истинного. Как я могу избежать этой проблемы?
Что тут происходит: #include #include int main(void) { printf(“17^12 = %lf\n”, pow(17, 12)); printf(“17^13 = %lf\n”, pow(17, 13)); printf(“17^14 = %lf\n”, pow(17, 14)); } Я получаю этот вывод: 17^12 = 582622237229761.000000 17^13 = 9904578032905936.000000 17^14 = 168377826559400928.000000 13 и 14 не соответствуют вольфрам alpa cf: 12: 582622237229761.000000 582622237229761 13: 9904578032905936.000000 9904578032905937 14: 168377826559400928.000000 168377826559400929 Более […]
Я пытаюсь извлечь биты из float, не вызывая неопределенное поведение. Вот моя первая попытка: unsigned foo(float x) { unsigned* u = (unsigned*)&x; return *u; } Насколько я понимаю, это не гарантирует работу из-за строгих правил псевдонимов, верно? Работает ли он, если требуется промежуточный шаг с указателем на символ? unsigned bar(float x) { char* c = […]
В C ++ (или, может быть, только наши компиляторы VC8 и VC10) 3.14 является двойным литералом, а 3.14f является плавающим литералом. Теперь у меня есть коллега, который заявил: Мы должны использовать float-литералы для вычислений float и двухлитровых для двойных вычислений, поскольку это может повлиять на точность вычисления, когда константы используются в вычислении. В частности, я […]
Возможный дубликат: проблемы в сравнении с плавающей запятой #include #include main() { float a = 0.7; if(a < 0.7) printf("C"); else printf("C++"); } В приведенном выше коде вывод равен C Я пробовал этот код в Code :: Blocks и Pelles C, но получил тот же ответ. Я хотел бы знать причину этого подробно!
При чтении исходного кода Lua я заметил, что Lua использует macro для округления до 32-битного int . Я извлек macro , и он выглядит так: union i_cast {double d; int i[2]}; #define double2int(i, d, t) \ {volatile union i_cast u; ud = (d) + 6755399441055744.0; \ (i) = (t)ui[ENDIANLOC];} Здесь ENDIANLOC определяется как endianness , […]
Я пытаюсь построить 32-битный float из 4 составных байтов. Есть ли лучший (или более переносимый) способ сделать это, чем со следующим методом? #include typedef unsigned char uchar; float bytesToFloat(uchar b0, uchar b1, uchar b2, uchar b3) { float output; *((uchar*)(&output) + 3) = b0; *((uchar*)(&output) + 2) = b1; *((uchar*)(&output) + 1) = b2; *((uchar*)(&output) […]
C ++ FAQ lite “[29.17] Почему мое сравнение с плавающей запятой не работает?” рекомендует этот тест равенства: #include /* for std::abs(double) */ inline bool isEqual(double x, double y) { const double epsilon = /* some small number such as 1e-5 */; return std::abs(x – y) <= epsilon * std::abs(x); // see Knuth section 4.2.2 pages […]
Есть ли разница между ними: float foo1 = (int)(bar / 3.0); float foo2 = floor(bar / 3.0); Насколько я понимаю, оба случая имеют одинаковый результат. Есть ли разница в скомпилированном коде?