相关疑难解决方法(0)

浮点数学是否破碎?

请考虑以下代码:

0.1 + 0.2 == 0.3  ->  false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2         ->  0.30000000000000004
Run Code Online (Sandbox Code Playgroud)

为什么会出现这些不准确之处?

language-agnostic math floating-point floating-accuracy

2798
推荐指数
28
解决办法
28万
查看次数

Fortran:整数*4 vs整数(4)vs整数(kind = 4)

我正在尝试学习Fortran,我看到很多不同的定义被传递,我想知道他们是否想要完成同样的事情.以下有什么区别?

  • integer*4
  • integer(4)
  • integer(kind=4)

fortran language-lawyer

55
推荐指数
3
解决办法
3万
查看次数

Fortran 90中有更好的双精度分配吗?

在Fortran 90中(在Mac OS X上使用gfortran)如果我将一个值赋值给一个双精度变量而没有明确地添加一种类型,则精度不会"采用".我的意思是,如果我运行以下程序:

program sample_dp

implicit none

integer, parameter :: sp = kind(1.0)
integer, parameter :: dp = kind(1.0d0)

real(sp) :: a = 0.
real(dp) :: b = 0., c = 0., d = 0.0_dp, e = 0_dp

! assign values
a = 0.12345678901234567890
b = 0.12345678901234567890
c = DBLE(0.12345678901234567890)
d = 0.12345678901234567890_dp

write(*,101) a, b, c, d
101 format(1x, 'Single precision: ',  T27, F17.15, / &
           1x, 'Double precisison: ', T27, F17.15, / &
           1x, 'Double precision (DBLE): …
Run Code Online (Sandbox Code Playgroud)

fortran fortran90

6
推荐指数
2
解决办法
1万
查看次数

扩展双精度

是否可以精确地获得超过16位数double而不使用quadruple?如果可能,它是否依赖于编译器或其他东西?因为我知道有人说他正在double精确地工作并且具有22位精度.

precision double fortran

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

在Fortran中使用REAL类型值作为do-loop控制变量时,为什么输出很奇怪?

当我用Fortran语言编写代码时,我发现当我在do-loop中将REAL值设置为control-var时,输出很奇怪,例如:

do i=0.1,1.0,0.1
write (13,"(F15.6)") i
end do
Run Code Online (Sandbox Code Playgroud)

输出是:0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0.但是当我将起始值设置为0.6时:

do i=0.6,1.0,0.1
write (13,"(F15.6)") i
end do
Run Code Online (Sandbox Code Playgroud)

输出是:0.6,0.7,0.8,0.9,而1.0不是输出.为什么会这样?

fortran do-loops

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