草庐IT

c++ - 为什么 Boost::multiprecision::sqrt(1) 返回 0?

Boost::multiprecision::sqrt(1)似乎返回0#include#include#includeusingstd::cout;usingstd::endl;intmain(){namespacemp=boost::multiprecision;mp::cpp_inti(1);cout输出:我==1mp::sqrt(i)==0我希望sqrt(1)==1。我在coliru上得到了相同的结果在我本地安装的gcc和Boost1.62上。这会发生在其他人身上吗?我是否遗漏了什么或者这是一个错误? 最佳答案 是的,这绝对是

c++ - 平方根元函数?

是否可以使用具有以下签名的元函数计算整数的平方根:templateinlinedoublesqrt();(或者可能使用constexpr关键字,我不知道什么是最好的)。这样,sqrt()将被1.414...取代在编译时。这种功能的最佳实现是什么? 最佳答案 这可能不是您想要的,但我想确保您意识到通常通过优化,编译器无论如何都会在编译时计算结果。例如,如果您有以下代码:voidg(){f(sqrt(42));}使用g++4.6.3和优化-O2,生成的汇编代码是:9000083EC1Csubl$28,%esp110003DD050000

完整正方形的 C++ sqrt 函数精度

设,x是一个整数并且y=x*x。那么是否保证sqrt(y)==x?例如,我能否确定sqrt(25)或sqrt(25.0)将返回5.0,而不是5.0000000003还是4.999999998? 最佳答案 符合IEEE-754标准的基本操作允许错误的实现(其中sqrt是一个示例)要求正确舍入值。这意味着误差将小于1/2ULP(最后一位的单位)或基本上尽可能接近实际答案。要回答您的问题,如果实际答案完全可以用double表示,那么您将得到准确的答案。注意:这不是由C++标准保证的,而是IEEE-754标准保证的,这对大多数人来说可能不是

c++ - 在 C++ 中重载命名空间 std 中的数学函数是一种好习惯吗

我正在编写一个表示算术类型的C++类(围绕mpfr的C++包装器),我想支持中的一些函数(我将以std::sqrt为例).所以我有以下类(class):namespacens{classMyClass{/*...*/public:friendMyClasssqrt(constMyClass&mc);};}我可以这样使用它:MyClassc;/*...*/MyClassd=ns::sqrt(c);MyClasse=sqrt(c);//ApparentlyIdon'thavetospecifyns::但我不能这样使用它:MyClassf=std::sqrt(c);编译器(g++(Debia

C++ sqrt 返回 -1.#IND000000000000

具体来说:我正在做一些数学运算,应用程序不断崩溃,因为广泛使用的double值恰好得到值:-1。#IND000000000000当“某些”数字被平方时...这是什么?不定?无限的?太大放不下?不是完美的平方根?有什么办法可以解决这个问题吗?提前致谢!编辑:我如何检查double值是否具有此值?我试过:if(x==0x-1.#IND000000000000)和其他变体但没有用。是否可以检查变量是否具有此值? 最佳答案 实际上,字符串-1.#IND000000000000不是函数返回的值,但它是QNaN的常见表示之一,QuietNot-

c++ - Visual Studio 不允许我使用 sqrt 或 floor,对重载函数的调用不明确

我调用longlonga=sqrt(n/2);a和n都是longlong但它不会让我编译因为它说我使用sqrt()是一个模棱两可的调用。我根本看不出它在这里可能是模棱两可的。我该如何解决这个问题?我对floor()也有同样的问题。我的包括#include"stdafx.h"#include#includeusingnamespacestd; 最佳答案 sqrt()有几个重载和floor(),对sqrt(longlong)的调用没有“最佳匹配”根据重载决议规则。只需将参数转换为适当的类型——即,longlonga=sqrt(stati

c++ - 如何在编程中表示 sqrt(-1)?

我想用C++表示sqrt(-1),因为我正在尝试实现FFT算法。有什么好的表示方法吗? 最佳答案 我猜你正在寻找#include例如:std::complexnum(0,1);您实际上可以使用std::sqrt有了这个complex要计算的类型sqrt(-1):#include#includeintmain(){conststd::complexresult=std::sqrt(std::complex(-1,0));std::cout对于wn=exp((2*pi*i)/n)你可以这样做:constdoublepi=std::aco

php - 为什么 is_int(sqrt(100)) 会返回 false

有谁知道为什么这总是返回False?is_int(sqrt(100))我应该使用什么语法来检查平方根是否为整数? 最佳答案 sqrt函数返回float值,而不是int。 关于php-为什么is_int(sqrt(100))会返回false,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9536866/

c++ - sqrt(int_value + 0.0) -- 它有目的吗?

在我非常奇怪的C++书中做一些作业时,whichI'vebeentoldbeforetothrowaway,有一个非常奇特的代码段。我知道家庭作业总是会给你带来额外的“神秘感”,试图让你感到困惑,比如在单语句for循环之后缩进2行。但我对这个感到困惑,因为它似乎有一些实际用途。基本上是这样的:intcounter=10;...if(pow(floor(sqrt(counter+0.0)),2)==counter)...我对这部分特别感兴趣:sqrt(counter+0.0)+0.0有什么用途吗?这是穷人对替身进行静态转换的方式吗?这是否避免了一些我不使用的编译器的编译器警告?当我遗漏+

c++ - 为什么 sqrt() 在没有为 int 定义的 int 变量上工作正常?

第3章Programming:PrinciplesandPracticeusingC++(第六次打印),Stroustrup指出(第68页):“请注意,sqrt()不是为int定义的”.下面是一个基于该章的简单C++程序:#include"std_lib_facilities.h"intmain(){intn=3;cout鉴于上面的引用,我预计编译或运行该程序的过程会以某种方式失败。令我惊讶的是,编译它(使用g++(GCC)4.2.1)并成功运行,没有错误或警告,并产生了以下完美的输出:Squarerootofn==1.73205因此我的问题是:如果sqrt()确实没有为int定义,那