Taking 1/7 power of a variable

  • Context: Fortran 
  • Thread starter Thread starter abdulsulo
  • Start date Start date
  • Tags Tags
    Power Variable
Click For Summary

Discussion Overview

The discussion revolves around the issue of taking the 1/7 power of a variable in programming, specifically in Fortran. Participants explore the behavior of integer versus floating-point division and its implications in calculations.

Discussion Character

  • Technical explanation
  • Debate/contested
  • Exploratory

Main Points Raised

  • One participant describes an issue where taking the power of 1/7 results in 1, similar to taking the power of 0, suggesting a problem with the operation.
  • Another participant suspects that the expression (1/7) is being treated as an integer operation, which leads to rounding down to 0.
  • A participant shares their code snippet and provides initial values for variables, reiterating that the calculation yields an incorrect result.
  • One participant suggests using (1./7.) to ensure floating-point division, indicating that this resolves the issue.
  • Another participant emphasizes that in programming languages like Fortran, C, and C++, integer division occurs when both operands are integers, leading to potential confusion.
  • A participant reflects on common errors encountered when learning Fortran, including issues with variable naming conventions and format statement errors.
  • Some participants express opinions on programming language design, suggesting that floating-point division should be the default behavior.
  • There is a mention of Pascal's approach to division, which uses distinct operators for integer and floating-point division, prompting a discussion on why more languages do not adopt this method.

Areas of Agreement / Disagreement

Participants generally agree on the confusion caused by integer versus floating-point division, but there are differing opinions on programming language design and the frequency of using integer division.

Contextual Notes

The discussion highlights limitations in understanding division behavior in programming, particularly regarding the treatment of integer and floating-point operations. There are also references to historical programming practices and potential pitfalls for beginners.

abdulsulo
Messages
13
Reaction score
0
Hello there. I am trying to take a power of 1/7 of one variable but as a default it gives me 1 similar to if I was taking power of 0. How can I solve this problem. Thanks
 
Technology news on Phys.org
What exactly did you write? I suspect that the 1/7 is being treated as an integer operation and rounded to 0.
 
  • Like
Likes   Reactions: abdulsulo
Fortran:
Do I=2,N,1
X1=(Yr(I)/R)
X2=X1**(1/7)
Ua(I)=Um*X2
END DO

X1 and X2 are both double precision. I decided to divide the equation and take power but still it didn't work for me.
On first iteration I am giving you the values of variables there;
R=0.05
Um=2
Yr= 2.85E-05

Whatever I do it gives X1**(1/7) as 1 which is not correct.
 
DrClaude said:
What exactly did you write? I suspect that the 1/7 is being treated as an integer operation and rounded to 0.
Your hint gave me an idea and I think I solved the problem. I put 1./7. to the equation and problem solved. Didn't notice it would roll it down to 0. Thank you very much.
 
In the expression (1/7), since both 1 and 7 are integers, it is treated as an integer operation, and the result is returned as an integer, namely 0. Try (1.d0/7.d0) instead.
 
  • Like
Likes   Reactions: abdulsulo
In addition to Fortran, the language used in the example of this thread, programming languages such as C and C++ also exhibit the same behavior of distinguishing between integer division and floating point division. As DrClaude already said, when both operands are integer values, the type of division that is performed is integer division. In this case, 1/7 is evaluated as 0. If one or both operands are a floating point type, then floating point division is performed.

The most commonly used CPUs for personal computers these days are those produced by Intel and AMD. Both types of CPU have one op code for integer division (DIV) and another for floating-point division (FDIV), which gives more precise results, but takes longer to calculate. Compilers for Fortran and C and C++ choose the type of division to perform based on the code you write.
 
  • Like
Likes   Reactions: abdulsulo
This is by far the most common error made when you write your first fortran program from scratch followed by:

1) implicit/explict variable naming conventions where variables starting with i thru n are integers and all others are reals unless you say otherwise with explicit statements.

2) format statement errors where the description is too small for displaying the number.

3) for free-form fortran typing a C in column 1 created a comment line so you had to make sure that "character" or "common" statements were indented otherwise you got all sorts of compile-time errors.

I added all of these to my personal collection of errors made list more than forty years ago give or take but more take than give.

and there are many more subtle ones too.
 
  • Like
Likes   Reactions: abdulsulo
If I ever designed a programming language, floating point division would be the default behavior. I do not recall the last time I actually used integer division.
 
rumborak said:
If I ever designed a programming language, floating point division would be the default behavior. I do not recall the last time I actually used integer division.
I use integer division often. This operation and the modulus operation are useful in converting days to weeks and days, ounces to pounds and ounces, making change, and many other applications.
 
Last edited:
  • #10
Doesn't Pascal have separate names for the two division operations? 'div' for integer and '/' for floating-point IIRC. That makes the distinction more obvious and let's you choose between the two where appropriate. I wonder why more languages don't do this, except for their age and backwards-compatibility issues (e.g. Fortran, C, probably C++).
 
  • Like
Likes   Reactions: rumborak
  • #11
I think you got the answer right there, backwards compatibility. Or rather, most programming languages, the time they were introduced, tried to do a few things differently, but at the same time tried to make it easy for programmers to switch over. So, they stuck with non-essential stuff like that.
 

Similar threads

  • · Replies 25 ·
Replies
25
Views
4K
Replies
9
Views
4K
  • · Replies 5 ·
Replies
5
Views
3K
Replies
235
Views
15K
Replies
4
Views
4K
  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 75 ·
3
Replies
75
Views
18K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 36 ·
2
Replies
36
Views
2K
  • · Replies 13 ·
Replies
13
Views
3K