计算机捉鬼(一)一个小程序

 在大多数计算机上,运行下面的程序会收到意想不到的结果:

#include <stdio.h>
main ()
{
 int a = 300;
 int b = 400;
 int c = 500;
 int d = 200;
 float jieguo = a*b*c*d;
 printf("%f",jieguo);
}

得到的结果是 -884 901 888 ,这显然违背了整数计算的规则,一系列正整数的乘积是一个负数。另一方面,整数的计算机运算却满足了真正整数运算的许多属性。例如:整数运算是可结合可交换的,这样一来,计算下面任何一个表达式的结果都是 -884 901 888

(500×400)×300×200

((500×300)×400)×200

(500×300)×(400×200)

400×(200×(500×300))

计算机没有产生我们期待的结果,但是结果确实惊人一致的。

       浮点运算有完全不同的运算属性。虽然溢出会产生特殊的值(正无穷),但是不会产生一个负数。但是,另一方面,由于表示的精度有限,浮点运算是不可结合的。例如,在大多数机器上,C表达式(3.14 +le20)-le20得到的值是0,但是3.14+(le20 -le20)得到的却是3.14

      我们需要了解可以表示的值的范围和计算属性。才能使编写的程序在全部的数值范围之内能够正确的工作,而且可以跨不同的机器,不同的平台。

    

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以计算加减乘除的计算器小程序package zj lec1; import java awt BorderLayout; import java awt FlowLayout; import java awt GridLayout; import java awt event ActionEvent; import java awt event ActionListener; import java math BigInteger; import javax swing JButton; import javax swing JFrame; import javax swing JLabel; import javax swing JPanel; import javax swing JTextField; public class 简易计算机 extends JFrame implements ActionListener { JTextField a b c d; JButton ok exit; public 简易计算机 { this setLayout new FlowLayout ; this add a new JTextField 10 ; a setText "0" ; a setHorizontalAlignment JTextField RIGHT ; this add b new JTextField 1 ; this add c new JTextField 10 ; c setText "0" ; c setHorizontalAlignment JTextField RIGHT ; this add ok new JButton " " ; this add d new JTextField 10 ; this add exit new JButton "Exit" ; a addActionListener this ; b addActionListener this ; c addActionListener this ; exit addActionListener this ; ok addActionListener this ; this setSize 540 70 ; this setTitle "简易计算机" ; this setVisible true ; this setResizable false ; } public static void main String[] args { new 简易计算机 ; } @Override public void actionPerformed ActionEvent e { if e getSource ok || e getSource c || e getSource a { BigInteger ia new BigInteger a getText ; BigInteger ic new BigInteger c getText ; String ib b getText ; 判断是用加法 还是减法 还是乘法 除法 if ib contains "+" { BigInteger id ia add ic ; d setText id toString ; } else if ib contains " " { BigInteger id ia subtract ic ; d setText id toString ; } else if ib contains " " { BigInteger id ia multiply ic ; d setText id toString ; } else if ib contains " " { BigInteger id ia divide ic ; d setText id toString ; } } else if e getSource exit { System exit 0 ; } } }">可以计算加减乘除的计算器小程序package zj lec1; import java awt BorderLayout; import java awt FlowLayout; import java awt GridLayout; import java awt event ActionEvent; import java awt event ActionListener; import java math BigInteger; import javax swing JButton; import javax swing J [更多]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值