相关疑难解决方法(0)

比较 Fortran 和 C++ 汇编程序的 int = floor(sqrt(...))

我在 Fortran 和 C++ 中分别实现了一个函数:

#include <math.h>

void dbl_sqrt_c(double *x, double *y){
   *y = sqrt(*x - 1.0);
   return;
}
Run Code Online (Sandbox Code Playgroud)
pure subroutine my_dbl_sqrt(x,y) bind(c, name="dbl_sqrt_fort")
   USE, INTRINSIC :: ISO_C_BINDING
   implicit none
   real(kind=c_double), intent(in)  :: x
   real(kind=c_double), intent(out) :: y

   y = sqrt(x - 1d0)
end subroutine my_dbl_sqrt
Run Code Online (Sandbox Code Playgroud)

我在编译器资源管理器中比较了它们:

Fortran:https : //godbolt.org/z/froz4rx97
C++:https : //godbolt.org/z/45aex99Yz

我阅读汇编程序的方式,它们基本上做相同的事情,但是 C++ 检查 sqrt 的参数是否为负,而 Fortran 则没有。我使用 googles 基准比较了它们的性能,但它们非常匹配:

--------------------------------------------------------
Benchmark              Time             CPU   Iterations
--------------------------------------------------------
bm_dbl_c/8          2.07 ns         2.07 ns    335965892
bm_dbl_fort/8       2.06 ns         2.06 …
Run Code Online (Sandbox Code Playgroud)

c++ performance assembly x86-64

40
推荐指数
2
解决办法
2462
查看次数

如何手动设置等于NaN的float的位值?

我正在尝试使用转换和浮点数转换到其他类型运行一些测试,我想将我的浮点变量设置为不同的nan值.

"IEEE浮点标准单精度(32位)NaN的一个逐步示例是:s111 1111 1axx xxxx xxxx xxxx xxxx xxxx其中s是符号(在应用程序中最常被忽略),a确定类型NaN和x是一个额外的有效载荷(通常在应用程序中被忽略).如果a = 1,它是一个安静的NaN;如果a是零且有效载荷是非零的,那么它是一个信令NaN"

基本上我想找到一种方法来设置表示的有效载荷或xxxx.有没有办法在c中这样做?

c floating-point nan

4
推荐指数
2
解决办法
2163
查看次数

当未定义的行为时,将double转换为整数

以下是:

double t = 244.233;
int a = (int) t;
Run Code Online (Sandbox Code Playgroud)

是不是未定义的行为,因为244可以适应内部int我做对了吗?否则,如果它是更大的值而不是244不适合内部int这将是未定义的,我做对了吗?

我对C如何做到这一点更感兴趣.但这种情况与C++有区别吗?

c c++

2
推荐指数
2
解决办法
803
查看次数

标签 统计

c ×2

c++ ×2

assembly ×1

floating-point ×1

nan ×1

performance ×1

x86-64 ×1