假设我们有0.33,我们需要输出"1/3".
如果我们有"0.4",我们需要输出"2/5".
我们的想法是让人们可读,让用户理解"y部分中的x部分",作为理解数据的更好方式.
我知道百分比是一个很好的替代品,但我想知道是否有一个简单的方法来做到这一点?
bc,一个linux命令行计算器,非常精通计算
3^2
9
Run Code Online (Sandbox Code Playgroud)
即使是负指数也不会混淆它:
3^-2
0.11111
Run Code Online (Sandbox Code Playgroud)
然而当它在它出现时失败了
9^0.5
Runtime warning (func=(main), adr=8): non-zero scale in exponent
Run Code Online (Sandbox Code Playgroud)
怎么可能是bc无法处理这个?
错误信息是什么意思?
是的,我已经阅读了 http://www.linuxquestions.org/questions/programming-9/bc-and-exponents-containing-decimals-and-fractions-755260/ 和解决方案
e(0.5*l(9))
2.99999999999999999998
Run Code Online (Sandbox Code Playgroud)
在那里.
是的,由于精确度的损失,它并不好
计算器应该解决表达式.你不应该让计算器的生活更轻松,它应该是另一种方式......
此功能旨在鼓励用户编写自己的功能.使其成为一个独特的计算器,需要用户定义的函数来计算平方根.
它并没有真正困扰我写的切线或余切值的功能,因为它看起来非常简单给出s(x)和c(x).但在我看来,通过用户定义的函数计算平方根有点太多了.
为什么有人使用bc,如果那里有python?速度?
我正在阅读如何自己编写电源功能?dan04给出的答案引起了我的注意,主要是因为我不确定fortran给出的答案,但我接受了并实现了这个:
#include <iostream>
using namespace std;
float pow(float base, float ex){
// power of 0
if (ex == 0){
return 1;
// negative exponenet
}else if( ex < 0){
return 1 / pow(base, -ex);
// even exponenet
}else if ((int)ex % 2 == 0){
float half_pow = pow(base, ex/2);
return half_pow * half_pow;
//integer exponenet
}else{
return base * pow(base, ex - 1);
}
}
int main(){
for (int ii = 0; ii< 10; ii++){\
cout << "pow(" …Run Code Online (Sandbox Code Playgroud) 我有一个应用程序,需要将一个数字提高到一个分数幂.目标平台是一个FPGA,我可以得到它的FPU大小的估计,但我需要一个算法,只是为了可行性研究将数字提高到一个分数功率.我假设浮点数是最坏的情况,我预计在实践中我们将能够使用捷径,但是现在我想表明我们可以实施最坏情况.
以为我会问这里,看看是否有任何常见的方法可以结账.我知道有这样做的软件方法,我想要一个合理有效的算法开始.我会担心FPGA的实现.
我不确定平方的幂是否可以处理负指数。我实现了以下仅适用于正数的代码。
#include <stdio.h>
int powe(int x, int exp)
{
if (x == 0)
return 1;
if (x == 1)
return x;
if (x&1)
return powe(x*x, exp/2);
else
return x*powe(x*x, (exp-1)/2);
}
Run Code Online (Sandbox Code Playgroud)
查看https://en.wikipedia.org/wiki/Exponentiation_by_squaring没有帮助,因为以下代码似乎是错误的。
Function exp-by-squaring(x, n )
if n < 0 then return exp-by-squaring(1 / x, - n );
else if n = 0 then return 1;
else if n = 1 then return x ;
else if n is even then return exp-by-squaring(x * x, n / 2); …Run Code Online (Sandbox Code Playgroud) 我只是想知道库的pow功能是如何math.h工作的,它是实现最简单的顺序算法还是使用其他的?
我只知道重复的平方算法,它报告O(log n),也许这是pow函数实现的算法?
所以我只是使用顺序算法vs进行了一些测试pow,发现第一个版本几乎比第二个快3倍.调用函数真的会惩罚这个测试的性能吗?为什么?
任何其他评论解释正在发生的事情或如何pow实施是值得欢迎的.
编辑:我错了,比顺序算法快pow 3倍.
先澄清一下:
我想要的是一个简单的算法,它最清楚地显示了 2^3.5 = 11.313708。除了基本的加法、减法、乘法或除法运算符之外,最好不要使用任何函数。
代码当然不必很快,也不必很短(尽管这会有所帮助)。别担心,它可以近似于给定的用户指定的准确度(这也应该是算法的一部分)。我希望会有一个二进制印章/搜索类型的事情,因为这很容易理解。
到目前为止,我已经找到了this,但在概念层面上,最重要的答案远非简单易懂。
答案越多越好,因此我可以尝试了解解决问题的不同方法。
我对答案的语言偏好是 C#/C/C++/Java,或者我所关心的伪代码。
我正在寻找函数的有效实现pow(a, b),其中a仅限于区间(0,1),并且b是>= 1(两者都是实数 - 即不一定是整数)。
如果有帮助, b这不是一个很高的数字——假设它小于 10-20。这将打开迭代解决这个问题的可能性,迭代次数很少~=b
代码应该在 32 位微控制器上工作,可能没有浮点单元(即,使用定点实现)。
我如何实现这样一个功能,针对以下约束进行优化?我正在寻找算法本身,所以伪代码是可以接受的。