C语言】c语言如何用科学计数法实现加减乘除运算?

2020-05-15 10:26发布

使用科学计数法进行加减乘除的要求输入科学计数法进行两者之间的加减乘除运算 并以科学计数法的形式输出如:Values input: 0.25000e3 0.20000el Sum: 0.25200e3 ...

使用科学计数法进行加减乘除的
要求输入科学计数法进行两者之间的加减乘除运算 并以科学计数法的形式输出
如:
Values input: 0.25000e3 0.20000el 
Sum: 0.25200e3 
Difference: 0.24800e3 
Product: 0.50000e3 
Quotient: 0.12500e3

5条回答
天天
2楼 · 2020-08-28 15:01

思路读取字符串,将e前面的转换为浮点数,e后面的转换为整数

用 前面的 * pow(10, 后面的)

得到值,然后计算


凉风有信
3楼 · 2022-09-05 16:52
先简单小结一下:当编译器优化能力很弱时,用移位代替简单除法(除2,4,8,16...)效率更高;当编译器优化能力很弱时,在低端CPU上,用移位代替简单乘法(乘2,4,8,16...)效率更高其它情况下,在C语言程序中,用移位操作代替乘除运算没什么效果,反而降低了代码的可读性下面简单说一下各种情况:编译器因素现代C编译器对于简单的2,4,8之类的乘除法,会在优化时根据条件自动转换成移位运算。这时,没有必要手动使用移位操作符代替乘除,相信编译器的优化能力就好了。有时候为了更好的适配目标CPU,可以给编译器提供详细参数,如ARM C编译器可指定乘法指令所需周期数,这就方便编译器针对特定CPU进行优化。除法当编译器不能进行自动移位优化时,对于简单除法,使用移位操作代替会有一定效果:由于除法的算法特性,RISC CPU(如ARM系列绝大多数CPU)都没有完整的整数除法指令,这是基于除法特殊性造成的。如果用浮点数除法模拟,则结果未必正确,同时起码需要十几个时钟周期才能完成。这时,如果能用两三次移位操作和加法组合完成除法,当然会有效率的提高。再说说CPU的影响:低端CPU这里提到的低端CPU,指的是没有硬件乘法器、也没有浮点协处理器的CPU。这类CPU的乘法需要用加法模拟,因此速度较慢。此时,用移位操作代替简单的乘法能提高效率。低端CPU举例:无MAC单元的ARM Cortex-M系列CPU,AVR的Atmega等各8位MCU。中高端CPU中高端CPU通常都有乘法器和浮点协处理器。对于这类CPU,用移位代替乘法意义不大,也许能在CPU指令发射时降低流水线阻塞(这是由于多发射高端CPU的移位处理单元数量多于乘法器数量),从而提高微量的性能,但总体影响微乎其微。
世界等同你
4楼 · 2022-09-05 16:52
你说的对,在计算机中的数字都是二进制数,即是由0和1组成的,在计算机中二进制数的乘除运算有时比加减运算还要快,原理上,二进制数的乘法乘2就是整个数左移一位,除2就是整个数右移一位,就完成了。用的时间就是一个指令周期,如果你在程序中使用十进制表达式,在程序执行时要先将十进制数变成二进制数,然后再进行二进制数的乘除运算,时间上要多得多。所以,在用C语音编程时,如果直接用二进制数移位算法来执行乘除,速度上要快很多。这是C语音编程的一个优点。
睡着的未来
5楼 · 2022-09-05 16:52
我们目前使用的x86cpu,都属于复杂指令集的cpu,这种cpu的移位指令的指令执行周期为一个时钟周期,而乘法指令是多个时钟周期(具体多少忘了),也就是说执行一个乘法指令可以执行多个移位指令,所以移位指令比乘法指令快,但移位指令只能执行乘或除2的整数次方的运算,而且还有高位或低位被移出(跟移位方向有关),所以只能有限的用,否则会弄巧成拙。
枕头说它不想醒
6楼 · 2022-09-05 16:52
对于c语言为什么移位比乘除快来谈谈我的看法,以前接触过低端单片机,低端单片机底层硬件对移位和乘除的处理是这样的,单片机对移位的操作是单片机内部有一个移位寄存器,而移位就是数据在寄存器里左移或者右移,数据的左移就是除以2,数据的右移就是乘以2,也就对应寄存器的左移和右移操作,所以移位和乘除有某种联系,即移位是乘除的一种方式。并且移位用到了一个寄存器,不需要经过ALU(算术逻辑单元)的运算。对于不是移位的乘除来说不仅要用到多个寄存器,而且还要经过算术逻辑单元的运算,加载寄存器需要时间,算术逻辑单元的运算也需要时间,很明显,用到一个寄存器的移位运算比用到多个寄存器和算术逻辑单元的乘除运算所需时间更少,即移位运算比不是移位的乘除运算快。

相关问题推荐

  • 回答 4

    public Fungus.Flowchart myflowchart; //把你的对话流程在Inspector窗里拖进去myflowchart.GetIntegerVariable(Integer变量名);其他变量类型也有相应方法,要更改用set方法即可

  • 回答 5

    string sourceFile = @C:\Users\wangwenping\source\repos\GetActivePro\ConsoleApp1\bin\Debug\;string zipfileName = ./debug;ZipFile.CreateFromDirectory(sourceFile, zipfileName);//源路径,目标路径

  • 回答 3

    TCP没有自身解析结束符的方法,只能通过接收来的数据,自己自行解析数据。我的方法是:通过字符串的IndexOf()方法和Substring()方法解析数据,并分段放在list列表中,进入lock之前,逐个提取list中的数据即可实现。...

  • 回答 19

    弱类型语言指的是一种没有很强类型概念的语言,如vb,而强类型语言指的是有很强类型概念的语言,如c(虽然c允许类型转换,但是相对来讲比vb要是强类型),弱类型的好处在于程序员不需要过多的着重与类型的转换,而强类型的好处在于程序可以有条不紊的执行,而...

  • 回答 14

    数据类型:1、基本数据类型C#拥有比C/C++或者Java更广泛的数据类型。这些类型是bool、daobyte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal。像Java一样,所有这些类型都有一个固定的大小。又像C和C++一样,每个数据类型都有有符...

  • 回答 6

    1、基本数据类型C#拥有比baiC/C++或者Java更广泛的数据类型。这些类型是bool、dubyte、ubyte、short、ushort、int、uint、long、ulong、float、double和decimal。像Java一样,所有这些类型都有一个固定的大小。又像C和C++一样,每个数据类型都有有符号和无符...

  • 回答 1

    根据题主的角色应该有不同的选择。一、在校大学生1. 电子类专业选择C开始学习,未来职业选择可以是嵌入式开发。语言只是工具,重点要理解硬件原理。如果对非嵌入式开发也有兴趣,未来可以以C的基础再扩展学习Java等语言。2. 网络工程、计算机类专业首先学C,...

  • 回答 3

    可以啊,可以考很多计算机二级的证书,不同方向都可以考,只是每次报考是有科目数量要求的吧

  • 回答 1

    个人觉得还是Java语言好一些, 他的应用面广,而且学习难度低,学出来以后就业找工作会好很多

  • 回答 1

    C语言并没有比java难,C++确实比java难。与其说难,倒不如说麻烦。java之所以比较简单主要是因为没有指针。

  • 回答 3

    无论是你计算机专业还是非计算机专业,无论你学习C语言的目的是为了考试考证还是以后的工作. 学习好C语言都是一件很好的事,编程语言那么多,C语言永远是最好的入门语言,对于考试考证的同学来说,学习C语言可以锻炼自己的逻辑能力,学会把一个大的问题化解成几个小...

  • 回答 1

    1.先学C,C语言非常经典,得一个月吧,学会c后,再学python一个下午就可以学会,java大概一个星期。2.然后漫长的熟悉库函数和各种技术的阶段,唯有多练,否则永远编不出任何有价值的程序。...

  • 回答 2

    两个语言是没有可比性的.首先c语言是编程语言,而vbs的脚本语言,脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.从功能来说肯定是c语言更强大和全面...

  • 回答 2

    因为爬虫用python写有多个优点:    1.各种爬虫框架,方便高效的下载网页;    2.多线程、进程模型成熟稳定,爬虫是一个典型的多任务处理场景,请求页面时会有较长的延迟,总体来说更多的是等待。    3.GAE 的支持,当初写爬虫的时候刚刚有 GAE,而且...

  • 回答 1

            用C语言开发WEB,称ISAPI,一般人可能做不起来,有点麻烦。唯一是速度很快,别人看不到你的源码,掌握了编程套路,也可以开发应用。          缺点:          1。不是解释性语言,做的WEB调试非常麻烦;现在做WEB开发的,...

  • 回答 1

    不是必要条件,c是面向过程,c++面向对象,面向对象是为了更好的编程处理业务,学习c更有助于了解程序的运行机制,如果想了解更底层的可以看看汇编语言,可以知道计算机如何运算。...

没有解决我的问题,去提问