function Complex(R , I){if( isNaN( R ) || isNaN( I )) { throw new TypeError('Complex params require Number'); }this.r = R;                          this.i = I;
}
// 加法
Complex.prototype.add = function (that) {return new Complex(this.r + that.r, this.i + that.i);
};
// 负运算
Complex.prototype.neg = function () {return new Complex(-this.r, -this.i);
};
// 乘法
Complex.prototype.multiply = function (that) {if (this.r === that.r && this.i + that.i === 0) {return this.r * this.r + this.i * this.i}return new Complex(this.r * that.r - this.i * that.i, this.r * that.i + this.i * that.r);
};
// 除法
Complex.prototype.divide = function (that) {var a = this.r;var b = this.i;var c = that.r;var d = that.i;return new Complex((a * c + b * d) / (c * c + d * d), (b * c - a * d) / (c * c + d * d));
};
// 模长
Complex.prototype.mo = function () {return Math.sqrt(this.r * this.r + this.i * this.i);
};
Complex.prototype.toString = function () {return "{" + this.r + "," + this.i + "}";
};
// 判断两个复数相等
Complex.prototype.equal = function (that) {return that !== null && that.constructor === Complex && this.r === that.r && this.i === that.i;
};
Complex.ZERO = new Complex(0, 0);
Complex.ONE  = new Complex(1, 0);
Complex.I    = new Complex(0, 1);
// 从普通字符串解析为复数
Complex.parse = function (s) {try {var execres = Complex.parseRegExp.exec(s);return new Complex(parseFloat(execres[1]), parseFloat(execres[2]));} catch (e) {throw new TypeError("Can't parse '" + s + "'to a complex");}
};
Complex.parseRegExp = /^\{([\d\s]+[^,]*),([\d\s]+[^}]*)\}$/;
// console.log(/^\{([\d\s]+[^,]*),([\d\s]+[^}]*)\}$/.exec('{2,3}'));
// 示例代码
var c = new Complex(2, 3);
var d = new Complex(2, 5);console.log(c.add(d).toString());
console.log(Complex.parse(c.toString()).add(c.neg()).equal(Complex.ZERO));
console.log(c.divide(d).toString(), Complex.parse('{2h, 09d}').mo())
// 共轭复数 得出的结果是普通实数了
console.log(new Complex(2, 3).multiply(new Complex(2, -3)))
{4,8}
true
{0.6551724137931034,-0.13793103448275862} Complex { r: 2, i: 9 }
13

js复数类的学习和使用相关推荐

  1. 【C++深度剖析教程11】C++学习之编写代码实现复数类

    今天,我来学习将复数的加减乘除以及比较运算,编写一个复数类,方便计算复数之间的运算.具体用的方法就是之前写过的操作符重载的概念来实现(操作符重载的概念学习). 那么为了显得清晰,今天写的程序运用模块化 ...

  2. 详细记录基于vue+nodejs+mongodb构建的商城学习(四)基于项目的node.js开发后端的学习与梳理总结...

    前置: 本系列文章是一个本人边学习边梳理的学习笔记,俗话说好脑袋不如烂笔头,再好的记忆力时间长了也会有细节忘记,本项目选择的前端框架是vue,后端开发使用是node.js,数据库使用的是mongodb ...

  3. JavaScript实现完整的ComplexNumber复数类(附完整源码)

    JavaScript实现完整的ComplexNumber复数类(附完整源码) radianToDegree.js完整源代码 ComplexNumber.js完整源代码 radianToDegree.j ...

  4. 使用类模板实现复数类

    写在前面 最近正好有时间, 系统的学习一下C++中的面向对象思想, 实现一下基本的复数类, 主要参考了B站侯捷老师的C++课程(<C++面向对象高级编程(上)-基于对象&面向对象> ...

  5. 使用c++实现复数类的运算

    复数的运算 一.前言 二.复数的运算 1.头文件(Complex.h) 2.源文件(实现函数) 3.源文件(测试函数) 4.运行截图 三.总结 一.前言 为了更深入的学习c++,小编将带领大家一起使用 ...

  6. 第十二周上机实践项目 项目1-实现复数类中的运算符重载 (2)

    问题及代码: [项目-实现复数类中的运算符重载] (1)请用类的成员函数,定义复数类重载运算符+.-.*./,使之能用于复数的加减乘除 class Complex { public:Complex() ...

  7. 实现复数类中的运算符重载

    /* *Copyright   (c)  2016,烟台大学计算机学院 *All rights reserved. *文件名称:test.cpp *作者: 武聪 *完成日期:2016年5月31日 *版 ...

  8. Vue.js实战之系统学习第七节

    想看上一节的请点击: Vue.js实战之系统学习第六节 接下来我们要学习第七节了,时间过的好快. 组件详解 组件是Vue.js的核心功能,也是整个框架设计最精彩的地方,当然也是最难掌握的.本章节将带你 ...

  9. 第7周-项目1-完整实现复数类中的运算符重载-扩展+、-、*、/运算符的功能

    问题及代码: /* *Copyright (c)2015,烟台大学计算机与控制工程学院 *All rights reserved. *文件名称:number.cpp *作 者:单昕昕 *完成日期:20 ...

最新文章

  1. wordpress主题wp-office2010初版
  2. 深度学习动手入门:GitHub上四个超棒的TensorFlow开源项目
  3. U-boot mkimage指定Linux内核地址时的两种方式
  4. android javamail获取邮件太多太慢_结合 Spring 发送邮件的4种正确姿势,你知道几种?...
  5. docker学习路程之部署一个nginx
  6. 关于Myeclipse2017 MemoryAnalyzer的安装
  7. matlab如何把选中区域标亮
  8. All men are brothers【并查集+数学】
  9. Python中list(列表)、tuple(元组)、dict(字典)的基本操作快速入门
  10. Airflow 中文文档:API 参考
  11. 前字节跳动程序员 28 岁提前退休引热议,网友:我也想!
  12. 纳尼?你居然还在使用fastjson,性能太差了,这个新出的秒杀fastjson
  13. 490 - Rotating Sentences
  14. 【Nginx系列】- Nginx源码复杂安装
  15. 不小心删了sxos文件夹_如何恢复Mac废纸篓删除的文件
  16. JAVA面向对象之对象和类
  17. item_review - 获得淘宝商品评论电商API
  18. JS实现页面快捷键功能
  19. CHECK约束在表继承中的使用
  20. 线性代数---(2)n维向量组

热门文章

  1. git 公钥提交代码_Git提交代码push的时候报错常见错误
  2. 解决Win2003 IIS不能下载rmvb
  3. 润肺健脾,试试3款靓汤
  4. VMware 8.0 安装 FC5 的VMware tools
  5. linux服务器下降,Linux服务器CPU占用率上升速度下降的解决
  6. EXCEL小技巧----有时候有些内容无法看到,却无法取消隐藏怎么办?原因可能是:隐藏+冻结+筛选
  7. 【PS4开发】unity3d ps4手柄键位
  8. 宏基服务器系统安装系统还原,宏碁win7系统重装教程
  9. 程序人生|五年java 含泪总结,建议小白看
  10. 八个步骤教你做好会议现场管理