CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

std::complex

楼主whoho(在北方流浪)2004-09-01 17:54:34 在 C/C++ / C++ 语言 提问

为什么std::comlex接口中不支持直接改变实部或者虚部,  
  这样的接口设计,主要考虑的是什么?又或者这是标准化进程的历史遗留?  
   
  这样多麻烦啊(语法麻烦,还多了个临时对象):  
  std::complex<double>   C;  
  C   =   std::complex<double>(3.0,   imag(C));  
   
  干吗不来个:  
  C.real()   =   3.0;  
  或者:  
  C.set_real_component(3.0);  
  问题点数:20、回复次数:6Top

1 楼ntxs(别人加薪我加班,数钱数到心发酸T_T)回复于 2004-09-01 18:41:39 得分 2

难道就不能   std::complex<double>   C(3.0,   imag(C))?????  
   
  Top

2 楼plainsong(短歌)()回复于 2004-09-01 18:49:28 得分 5

这样是很合理的,因为std::complex的概念就是增加复数类型——就象浮点数是一个类型一样。我们同样无法只修改浮点数的尾数或是阶码。Top

3 楼Wugifer()回复于 2004-09-01 18:53:57 得分 3

可以用   C   +=   3.0   -   C.real   ();Top

4 楼whoho(在北方流浪)回复于 2004-09-02 10:37:02 得分 0

上面几种方法:  
  std::complex<double>   C(3.0,   imag(C))  
  C   +=   3.0   -   C.real   ();  
  都有局限性的,  
  第一种:我如果要在构造以后的适当时机改变,那么就不适用  
  第二种:这种方法挺好,只是效率上,还是不如直接设定的方式  
                因为这里包括了一个普通函数,两个运算符(-和+=),   引入了一个临时对象  
   
    plainsong(短歌):  
  我原来也这么考虑过,但是,对复数的分量进行设置是非常普遍的行为  
  比如我用复数表示复平面内的一个点,而后要把这个点竖直移动到x轴,或者移动到  
  y=3.0这条直线上  
   
  所以我觉得作为复数这个抽象概念来讲,改变其分量并不是破坏抽象的行为  
  Top

5 楼plainsong(短歌)()回复于 2004-09-02 10:48:51 得分 10

 
          我觉得当你把复数看成是“复平面上的一个点”的时候,这时你用到的概念就不再是一个“数”了,而是一个点。如果你要把复数当作点来进行几何处理时,完全可以通过这个复数来构造一个点。  
          当然可以让std::complex同时且有“复数”和“点”以及“向量”的概念,但把概念分开可能更好。比如当我提供一个几何库和线性代数库,它们当然有自己的类型point和vector,不可能使用std::complex。如果你已经习惯了把complex当作点或是向量处理,当你决定改用这两个库处理时(可能是因为效率更高或是更健壮,或其它原因),你会遇到一些麻烦。Top

6 楼whoho(在北方流浪)回复于 2004-09-02 14:40:41 得分 0

plainsong(短歌)   :  
   
  对这个区分我倒是没有注意得很充分,学数学的时候,通常为了  
  分析的方便,混合使用几种表示法.现在看来,仅从概念出发,  
  严格地说,当然点、向量和复数,当然不是一回事。不过从  
  数学领域去看,这三者通常具有非常紧密的联系的,而且经常  
  彼此映射:三者之间任何两个都可以是一一映射的关系.  
  复数作为数学概念,理应发挥比较好的媒介作用,   孤立地引入复数  
  类,而不考虑它的实际用途,我觉得这并不该是库设计的初衷  
   
  前几天我在量算地图上的角度时,就使用了std::arg(z1/z2),  
  (这里的地图坐标是(double,double)),我感觉直接采用这样的办法  
  非常简便,而且标准库的实现代码通常也高效,合适的时候,  
  尽量采用标准库,我觉得是很自然的事情.  
   
  这个问题看来是仁者见仁智者见智啊.  
   
  多谢!  
  Top

相关问题

  • About STD?
  • std::generat(....)
  • std::cout<< xxx<<std::endl
  • ( std::map > std::set ) ? true : false
  • std::vector<std::string>的问题
  • about "using namespace std"
  • 关于std::swap()
  • std::string to System::string
  • std::vector<>用不了?
  • CPPUNIT和std::exception::operator=()

关键词

  • 数学
  • real
  • 复数
  • complex
  • std
  • 向量
  • 库
  • 概念
  • 类型
  • 觉得

得分解答快速导航

  • 帖主:whoho
  • ntxs
  • plainsong
  • Wugifer
  • plainsong

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo