Tag: 浮点

当我使用浮点数时,如果限制范围,是否会失去精度?

我试着阅读有关浮点实现的IEEE标准,但它对我来说非常先进,而且我没有为生活而编程。 这是我想知道的。 假设我有一个介于0和N之间的浮点变量,我会在需要时将其缩放,但中间计算将在此非标准化值中完成。 从逻辑上讲,范围[0.0, 1.0]就足够了。 但如果我将数字限制在0和1之间,我会以某种方式失去精确度吗? 如果我使用[0, 10.0] [0, 1000000.0]或[0, 1000000.0] ,我会获得任何收益吗? 谢谢。

比较C或C ++中两个浮点值的总和

假设您有两组根据IEEE754实现的浮点变量,意味着将其视为根据标准中的公式计算的精确值。 所有合法价值都是可能的。 集合中的变量数量可以是任何自然数。 在数学意义上,比较精确的由所述变量表示的值的总和的好方法。 由于域的性质,问题可以很容易地表示为将单个总和与零进行比较。 您可以忽略存在NaN或无限的可能性,因为它与核心问题无关。 (可以轻松独立地检查这些值,并以适合此问题的特定应用的方式采取行动。) 一种天真的方法是简单地求和和比较,或者将一组的值和另一组的值相加。 bool compare(const std::vector& lhs, const std::vector& rhs) { float lSum = 0.0f; for (auto value : lhs) { lSum += value; } float rSum = 0.0f; for (auto value : rhs) { rSum += value; } return lSum < rSum; } 很明显天真方法存在问题,如关于浮点运算的各种其他问题中所提到的。 大多数问题都与两个困难有关: 浮点值的相加结果根据顺序而不同 添加某些值集的某些顺序可能导致中间溢出(计算的中间结果超出可用数据类型支持的范围) float small […]

为什么x和y总是带浮点数?

int main(void){ float x =1; float y =2; while (x<y){ x = x +1 ; y = y +1; } printf("x is %d\n", x); printf("y is %d\n", y); } 我希望x和y增加到我们用完的位数,但在这种情况下似乎x和y总是0 …

C中的浮点数组

我正在开发一个代码,我必须在文本文件中一次加载存储在每一行中的浮点值…我使用fscanf()将每个数据加载到一个浮点数组中…但是我发现浮点数以不同的方式存储,例如407.18存储为407.179993,414.35存储为414.350006 …现在我被卡住了,因为数据以它们在文件中的forms存储是绝对重要但这里似乎是虽然基本上是相同的……但是我如何得到以原始forms存储的数字?

在C中手动实现舍入function

我编写了一个C程序(这是我项目的一部分),将浮点值四舍五入到用户指定的给定精度。 function是这样的 float round_offf (float num, int precision) 我在这个程序中所做的是将浮点数转换为字符串然后进行处理。 但有没有办法将数字保持为浮动本身并实现相同的。 例如。 num = 4.445 prec = 1 result = 4.4

如何在网络上进行浮点数的序列化?

我发现了一段代码来对网络上的浮点数进行序列化。 uint32_t htonf(float f) { uint32_t p; uint32_t sign; if (f < 0) { sign = 1; f = -f; } else { sign = 0; } p = ((((uint32_t)f)&0x7fff)<<16) | (sign<<31); // whole part and sign p |= (uint32_t)(((f – (int)f) * 65536.0f))&0xffff; // fraction return p; } 规范:上面的代码是一种天真的实现,它存储一个32位数的浮点数。 高位(31)用于存储数字的符号(“1”表示负数),接下来的7位(30-16)用于存储浮点数的整数部分。 最后,剩余的比特(15-0)用于存储数字的小数部分。 其他人都很好但我无法弄清楚这意味着什么。 这怎么能让我们得到15-0位? 为什么我们需要“* […]

无法比较两个CLLocationCoordinate2Ds(负零??)

我正在努力比较我的iOS应用程序中的两个(应该是相同的) CLLocationCoordinate2D结构。 出于某种原因,无论我如何比较它们,纬度都不会说它是平等的。 代码: double dlat = self.mapView.centerCoordinate.latitude – self.centerOnNextView.coordinate.latitude; double dlong = self.mapView.centerCoordinate.longitude – self.centerOnNextView.coordinate.longitude; NSLog(@”dlat: %f dlong: %f, dlat == 0.0: %d, dlat == -0.0: %d, dlong == 0.0: %d, dlong == -0.0: %d”, dlat, dlong, dlat == 0.0, dlat == -0.0, dlong == 0.0, dlong == -0.0); if ( ( dlat == […]

如何打印最大可能的浮点数并在C中加倍?

对于以下代码, #include #include #include int main(void) { printf(“double max = %??\n”, DBL_MAX); printf(“double min = %??\n”, DBL_MIN); printf(“double epsilon = %??\n”, DBL_EPSILON); printf(“float epsilon = %??\n”, FLT_EPSILON); printf(“float max = %??\n”, FLT_MAX); printf(“float min = %??\n\n”, FLT_MIN); return 0; } 为了让printf将各种数量显示为适当大小的十进制数,我必须使用哪些说明符代替??

如何将4字节存储如此大的3.4e38值

与32位一样,我们只能存储2 ^ 32位数据。 在C语言中,我们如何存储如此大的值3.4e38。 我无法理解它背后的机制。

浮点算术的最佳实践

我正在对小数点输入执行加法和减法,精确到小数点后第二位。 我试图通过乘以100将它们转换为整数来提高准确度,但却达到了相反的效果。 请考虑以下代码和输出: double d = 2.01; int a = (int) (d * 100.0); cout << a << endl; 输出是: 200 一劳永逸,关于浮点算术的一些最佳实践是什么? 首先使用上面代码的一些变体将double转换为int ,然后将其转换回来是否可行?