草庐IT

double-dispatch

全部标签

c++ - 是否有用于指定 double 的数字后缀?

voidFoo(floata){}//1voidFoo(doublea){}//2overloadedFoo(1.0f);//callsfunction1Foo(1.0/*doublenumericsuffix?*/);//callsfunction2如果不是,那么强制转换是实现此目的的唯一方法吗?我主要感兴趣在某些操作等过程中确保double学:ulongj;doublev;j=/*somevalue*/;if(j>0UL)v=1.0/j;//if1.0issetasafloatbythecompilerthen//coulditbelikelywelosesomeprecision

c++ - 在 C++ 中,static_cast<double>(a) 和 double(a) 有什么区别?

两者有什么区别inta;//agetssomevaluedoublepi=static_cast(a)/3;和inta;//agetssomevaluedoublepi=double(a)/3;你见过后者吗?在我看来,我在Stroustrup编写的一些片段中看到了它,但我找不到引用。 最佳答案 可能有人认为他们是在构建而不是在类型转换。考虑:some_fun(std::string("Hello"));许多人认为他们在那里调用了构造函数,而实际上他们正在执行C风格的转换。碰巧的是,强制转换会在它查看的一长串其他东西中查看目标类型的构

c++ - 在 C++ 中,static_cast<double>(a) 和 double(a) 有什么区别?

两者有什么区别inta;//agetssomevaluedoublepi=static_cast(a)/3;和inta;//agetssomevaluedoublepi=double(a)/3;你见过后者吗?在我看来,我在Stroustrup编写的一些片段中看到了它,但我找不到引用。 最佳答案 可能有人认为他们是在构建而不是在类型转换。考虑:some_fun(std::string("Hello"));许多人认为他们在那里调用了构造函数,而实际上他们正在执行C风格的转换。碰巧的是,强制转换会在它查看的一长串其他东西中查看目标类型的构

c++ - 在 int 和 double 之间转换有多贵?

我经常看到将整数转换为double整数再转换为double整数的代码(有时是有充分理由的,有时不是),我突然想到这似乎是我程序中的“隐藏”成本。我们假设转换方法是截断。那么,它到底有多贵?我确信它会因硬件而异,所以让我们假设一个新的英特尔处理器(Haswell,如果你愿意,尽管我会接受任何东西)。我会感兴趣的一些指标(尽管一个好的答案不需要全部):生成的指令数使用的周期数与基本算术运算相比的相对成本我还假设,考虑到我们每秒可以执行的计算量相对于数据量的差异,我们最能感受到转换速度慢的影响的方式是功耗而不是执行速度实际上可以每秒到达CPU。 最佳答案

c++ - 在 int 和 double 之间转换有多贵?

我经常看到将整数转换为double整数再转换为double整数的代码(有时是有充分理由的,有时不是),我突然想到这似乎是我程序中的“隐藏”成本。我们假设转换方法是截断。那么,它到底有多贵?我确信它会因硬件而异,所以让我们假设一个新的英特尔处理器(Haswell,如果你愿意,尽管我会接受任何东西)。我会感兴趣的一些指标(尽管一个好的答案不需要全部):生成的指令数使用的周期数与基本算术运算相比的相对成本我还假设,考虑到我们每秒可以执行的计算量相对于数据量的差异,我们最能感受到转换速度慢的影响的方式是功耗而不是执行速度实际上可以每秒到达CPU。 最佳答案

c++ - `long double` 的格式说明符是什么

我正在开发适用于各种Unix和Windows32位和64位操作系统的应用程序。我使用longdouble数据类型,当我使用sprintf()并使用longdouble和%lf然后它在windows下工作正常不会给出任何类型的错误,但是在Solaris平台上它会给出核心转储。相同问题的示例代码如下。voidmain(){stringsize="16622";stringsizeFact="20";longlongsizeLongLong=strtoll(size);intfactInt=atoi(sizeFact);longdoublesizeLongDouble=(longdouble

c++ - `long double` 的格式说明符是什么

我正在开发适用于各种Unix和Windows32位和64位操作系统的应用程序。我使用longdouble数据类型,当我使用sprintf()并使用longdouble和%lf然后它在windows下工作正常不会给出任何类型的错误,但是在Solaris平台上它会给出核心转储。相同问题的示例代码如下。voidmain(){stringsize="16622";stringsizeFact="20";longlongsizeLongLong=strtoll(size);intfactInt=atoi(sizeFact);longdoublesizeLongDouble=(longdouble

c++ - 为什么这个 double 值打印为 "-0"?

doublea=0;doubleb=-42;doubleresult=a*b;couta*b的结果是-0,但我期望0。我哪里做错了? 最佳答案 -0.0和0.0的位表示不同,但值相同,所以-0.0==0.0会返回true。在您的情况下,result是-0.0,因为其中一个操作数是负数。看这个演示:#include#includevoidprint_bytes(charconst*name,doubled){unsignedchar*pd=reinterpret_cast(&d);std::cout";for(inti=0;i""输出

c++ - 为什么这个 double 值打印为 "-0"?

doublea=0;doubleb=-42;doubleresult=a*b;couta*b的结果是-0,但我期望0。我哪里做错了? 最佳答案 -0.0和0.0的位表示不同,但值相同,所以-0.0==0.0会返回true。在您的情况下,result是-0.0,因为其中一个操作数是负数。看这个演示:#include#includevoidprint_bytes(charconst*name,doubled){unsignedchar*pd=reinterpret_cast(&d);std::cout";for(inti=0;i""输出

c++ - C 和 C++ 中 float 和 double 的大小是多少?

这个问题在这里已经有了答案:Fixed-sizefloatingpointtypes(4个回答)关闭8年前.我想看看是否有任何类似于uint32_t的标准类型,它总是会映射到32位无符号整数类型,但我找不到。float的大小在所有平台上都是4字节吗?double的大小总是8吗?这两个标准对此事有任何说明吗?我想确保我的大小在所有平台(x86和x64)上始终相同,因此我使用标准int类型,但我找不到float和双。 最佳答案 摘自C99标准,规范性附件F(C++标准没有明确提及此附件,尽管它包括所有受影响的功能,每个引用都没有更改。此