加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 平方根元函数?

发布时间:2020-12-16 05:44:50 所属栏目:百科 来源:网络整理
导读:是否可以使用具有以下签名的元函数计算整数的平方根: templateunsigned int N inline double sqrt(); (或者可能使用constexpr关键字,我不知道什么是最好的). 这样,sqrt 2()将在编译时被1.414 …替换. 什么是这种功能的最佳实现? 解决方法 这可能不是你想要
是否可以使用具有以下签名的元函数计算整数的平方根:
template<unsigned int N> inline double sqrt();

(或者可能使用constexpr关键字,我不知道什么是最好的).
这样,sqrt< 2>()将在编译时被1.414 …替换.

什么是这种功能的最佳实现?

解决方法

这可能不是你想要的,但我想确保你意识到通常通过优化,编译器无论如何都会在编译时计算结果.例如,如果您有此代码:
void g()
{
  f(sqrt(42));
}

使用g 4.6.3进行优化-O2,得到的汇编代码为:

9 0000 83EC1C                subl    $28,%esp
  11 0003 DD050000              fldl    .LC0
  12 0009 DD1C24                fstpl   (%esp)
  13 000c E8FCFFFF              call    _Z1fd
  14 0011 83C41C                addl    $28,%esp
  16 0014 C3                    ret
  73                    .LC0:
  74 0000 6412264A              .long   1244009060
  75 0004 47EC1940              .long   1075440711

实际上从未调用sqrt函数,并且该值仅作为程序的一部分存储.

因此,要创建一个技术上符合您要求的功能,您只需要:

template<unsigned int N> inline double meta_sqrt() { return sqrt(N); }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读