【发布时间】:2014-09-07 15:17:07
【问题描述】:
假设我有一个double a = 0.3;。在不使用 pow() 等数学函数或手动相乘的情况下,我如何能够更改变量的指数。
我猜我必须使用指针访问变量的内存地址,找到指数并手动更改它。但是我该如何做到这一点呢?
请注意,这是在 8 位系统上,我正在尝试找到一种更快的方法将数字乘以 10^12、10^9 , 10^6 或 10^3。
最好的问候!
【问题讨论】:
-
我认为你不会有太大的成功。典型浮点的指数部分是 二进制 指数,而不是以 10 为底的指数。
-
看到
double是一个 二进制 浮点数,调整指数位将无助于乘以 10 的幂,只能乘以 2 的幂。跨度> -
您需要一个准确的结果,还是一个近似值对您来说足够好?
-
正如其他人所说,在这里摆弄比特对您没有帮助。但是如果你不使用
pow函数来计算你的因子10^x,你可能会加快你的计算速度。 (如果你现在正在这样做,那就是。) -
@user1806687:您可以使用查找表,例如:
double decpow[] = {1, 10, 100, 1000, ...}并使用decpow[x]而不是pow(10, x)。 (当然,这需要x的非负整数值。但也有类似的解决方案取决于您的需要。似乎您只使用与单位前缀相关的十次方,如千-、兆-等)
标签: c double-precision exponent