【问题标题】:How to combine variables to represent scientific notation in C?如何在 C 中组合变量来表示科学计数法?
【发布时间】:2014-02-01 03:39:34
【问题描述】:

如果我有

a = 3;
b = 5;

我怎样才能做到这一点

double result = 3e5,但只使用变量?

我知道 aeb 显然不起作用。

【问题讨论】:

  • 你的问题毫无意义。请澄清。
  • 喜欢double result = a * exp10((double)b);?
  • @OldProgrammer 这对我来说很有意义
  • 你可以编写一个函数来根据 a/b 参数追加 0
  • 我的意思是不是普通的 3e5,而是数字 3 和 5 存储在变量中。

标签: c scientific-notation


【解决方案1】:

试试:

double result = a * pow(10.0,(double)b);

或者,使用 GNU 扩展:

double result = a * exp10((double)b);

在任何一种情况下,#include math.h 并链接到数学库(例如-lm)。这可能比拼凑一个字符串并转换为 double 更有效。

【讨论】:

  • 这更有效,但在良好的 C 实现中不太准确。 pow 的结果可能有一些错误,乘法可能有一些错误。在一个好的 C 实现中,atof 会产生尽可能准确的结果。但是,C 标准并不要求这样做。
【解决方案2】:

使用stdlib.hsprintf中定义的函数atof

float a = 3;
int b = 5;

char tmp[10];
sprintf(tmp, "%fe%d", a, b);

double x = atof(tmp);
printf("x = %fe%d = %f\n", a, b, x);

输出:http://ideone.com/NdDcNB

x = 3.000000e5 = 300000.000000

【讨论】:

  • 您可能需要使用snprintf 和更大的缓冲区大小以防ab 变得非常大。
猜你喜欢
  • 2013-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-08
  • 2017-04-01
  • 2013-11-27
相关资源
最近更新 更多