草庐IT

c++ - 在 C++ 中有效地乘以常数分数

我正在实现一个Runge–Kutta程序,其中包括几个时间关键的乘法与固定的、复杂的分数(这不是魔数(MagicNumber),而是算法固有的),我希望这种乘法尽可能高效地执行,同时保持代码可读。为了简单起见,假设我的代码如下所示,如果我不需要关心效率的话:for(inti=0;i我可以假设每个合理的编译器(经过优化)都能有效地将2197/4104替换为0.535331吗……?如果没有,确保这一点的好方法是什么?例如,定义一个constdouble就足够了吗?(请注意,我对优化上述代码的其他可能性不感兴趣——这实际上只是一个示例。) 最佳答案

c++ - 为什么 1.0 乘以 5 得到输出 5 而不是 5.0?

cout在这两种情况下,我的答案都是5而不是5.0。请帮助... 最佳答案 需要指定floatingPoint输出的格式和精度,如:std::coutLIVE来自[The.C++.Programming.Language.Special.Edition]21.4.3浮点输出[io.out.float]:Floatingpointoutputiscontrolledbyaformatandaprecision:–Thegeneralformatletstheimplementationchooseaformatthatpresents

c++ - 如何在 C++ 中将 64 位整数乘以分数同时最小化错误?

这个问题在这里已经有了答案:Mostaccuratewaytodoacombinedmultiply-and-divideoperationin64-bit?(12个答案)关闭8年前。给定一个64位(有符号)longlong或__int64,您将如何将它乘以任意分数,同时最大程度地减少错误?三个简单的草图:int64_tnumerator=...;int64_tdenominator=...;int64_tx=...;//a,lossydoubleconversionforlargevaluesdoublefraction=static_cast(numerator)/static_c

c++ - 乘以 float 并保持/获得 double 精度

我有一个接受float的函数,我正在用它们做一些计算,我想尽可能保持返回结果的准确性。我读到,当您将两个float相乘时,有效数字的数量就会翻倍。所以当两个float相乘时,例如floate,f;我做doubleg=e*f,位何时被截断?在我下面的示例函数中,我是否需要强制转换,如果需要,在哪里?这是一个紧密的内部循环,如果我把static_cast(x)围绕每个变量abcd在使用它的地方,我会减速5-10%。但我怀疑我不需要单独转换每个变量,而且只需要在某些位置转换,如果有的话?还是在这里返回一个double不会给我任何yield,我也可以只返回一个float?doublefunc(

c++ - 乘以下一个数字

我正在尝试编写一个程序,将输入数字乘以2,然后在循环中将答案乘以2,但是我无法让我的程序将第二个数字相乘,这是我的代码。intmain(){intnumber;cout>number;while(true){intmultiply=number*2;cout如何让这个程序将之前相乘的数字相乘?提前致谢! 最佳答案 只需重复使用同一个变量:while(true){number=number*2;//Thesame!cout但是不要指望程序在时间结束之前都能正确运行:int变量的最大值为(2^31-1),因此最多30次迭代就可以了.

c++ - 我怎样才能乘以非常大的数字 C++

我有以下代码inti,a,z;i=2343243443;a=5464354324324324;z=i*a;cout当这些相乘时,它会给出-1431223188,这不是答案。我怎样才能让它给我正确的答案? 最佳答案 结果溢出int(还有std::uint64_t)你必须使用一些BigInt库。 关于c++-我怎样才能乘以非常大的数字C++,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/question

c# - 在 C# 和 C++ 中将 float / double 乘以 0.5 而不是除以 2 是否安全?

基本上是这样的(不是真正的代码):for(inti=0;iv0.pos类型为Vector3,但可能是Vector3.这样做安全吗?:Vector3center=(v0.pos+v1.pos)*0.5;这似乎是不成熟的优化,但它必须尽可能快,以便在数十亿点(点云)上调用。 最佳答案 无论如何都不是C++专家,但在C#中,这样做:vara=newFunc((floatf1,floatf2)=>(f1+f2)*0.5);varb=newFunc((floatf1,floatf2)=>(f1+f2)/2);在前者中生成IL:加载参数添加它们

c++ - double 的高性能加法和乘法的常量形式

我需要在循环中有效地将一些常量添加或乘以double类型的结果以防止下溢。例如,如果我们有int,则乘以2的幂将很快,因为编译器将使用位移位。是否有一种常量形式可用于高效的double加法和乘法?编辑:似乎没有多少人理解我的问题,为我的草率道歉。我将添加一些代码。如果a是一个int,这个(乘以2的幂)会更有效率inta=1;for(...)for(...)a*=somefunction()*1024;当1024被替换为1023时。不确定如果我们想添加到int什么是最好的,但这不是我的兴趣。我对a是double的情况很感兴趣。哪些形式的常量(例如2的幂)可以有效地和相乘成double?常

c++ - C++ 中是否有标准的 3d vector 类

在一个现有的项目中,我看到一个Vector_3d类,模板化,具有vector的常用操作(在代数意义上)。经过剖析,我注意到大量的时间花在了这门课上。我想知道在C++中是否有像3dvector这样的基本概念的众所周知的实现。事实上,使用vector的良好实现可能比尝试优化这个vector更容易。编辑:这是在某些对象的几何表示的上下文中。但它独立于任何可视化。我会看看是否有办法避免过于频繁地调用各种方法。我将查看建议的软件包。 最佳答案 3dvector类没有太多改进空间(基本上,点积/叉积相当容易,矩阵乘法也是如此)。如果在该类(cl

c++ - 大负数乘以 -1 给出输出负数 C++

为什么这个程序的输出是-2147483648?#includeusingnamespacestd;intmain(){longlonga=-2147483648;a=a*-1;cout它应该是2147483648因为它在longlong范围内。为什么标志没有变化?我什至尝试过abs()函数,但结果是一样的。另外更令人惊讶的是,这个程序输出了2147483648:#includeusingnamespacestd;intmain(){longlonga=-2147483648;a=a*-1;a=a*-1;cout第二次,乘以-1成功了。如果重要的话,我使用的是C++4.8.1。