如何在C程序中引入一些带有大量重要数字的小数字?

时间:2010-03-16 21:23:32

标签: c

我对编程并不是特别了解,我正试图弄清楚如何在C程序中获得精确的值。我需要一个常数为负7的幂,有5个有效数字。任何建议(记住我知道的很少,除了c之外从未编程过,只有在几年前我在学校学习的必修课程中)?

谢谢!

5 个答案:

答案 0 :(得分:3)

您可以从专业库中获得高精度数学,但如果您只需要5位有效数字,那么内置的floatdouble类型就可以了。让我们使用double来获得最大精度。

负数7 th 功率仅为1,超过7 th 功率,所以......

double k = 1.2345678;  // your constant, whatever it is
double ktominus7 = 1.0 / (k * k * k * k * k * k * k);

......就是这样!

如果要打印出值,可以执行类似

的操作
printf("My number is: %9.5g\n", ktominus7);

答案 1 :(得分:2)

对于常数值,所需的计算也将保持不变。因此,我建议您使用[桌面计算器/ MATLAB / other]计算值,然后在C代码中对其进行硬编码。

答案 2 :(得分:1)

在计算机浮点格式领域,五位有效数字并不多。在C的大多数实现中,用于float的32位IEEE-754浮点类型具有24位精度,大约是7.2个十进制数字。所以你可以毫无畏惧地使用浮点数。 double通常具有53位精度(几乎16位十进制数)。 Carl Smotricz的答案很好,但是C中还有一个pow函数可以将-7.0传递给。{/ p>

有些时候你必须小心算法的数值分析,以确保你不会失去中间结果的精度,但这听起来不像其中之一。

答案 3 :(得分:0)

long double在大多数情况下提供最佳精确度,并且可以静态分配和重复使用以将浪费降至最低。另见quadruple precision。两者都从平台变为平台。四倍精度表示最左边的位(1)继续指示符号,而接下来的15位指示指数。 IEEE 754(即binary128)如果提供的链接不够,它们都会返回long double:)

如果我理解正确的话,简单的转移应该照顾其余部分吗?

答案 4 :(得分:-3)

您可以使用日志将小数字转换为更大的数字,并在日志转换版本上进行数学运算。它有点棘手,但大部分时间都可以使用。你也可以切换到没有这个问题的python。