www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - pow exponent type issue

reply jmh530 <john.michael.hall gmail.com> writes:
I'm a little confused on why pow behaves so differently when 
switching from an int to a uint for the exponent.

import std.math : pow;
import std.stdio : writeln;

void main()
{

	float x = 2;
	int y1 = 1;
	uint y2 = 1;

	writeln(pow(x, -y1));  //prints 0.5
	writeln(pow(x, -y2));  //prints inf

}
Aug 24 2016
parent reply ag0aep6g <anonymous example.com> writes:
On Wednesday, 24 August 2016 at 19:16:56 UTC, jmh530 wrote:
 I'm a little confused on why pow behaves so differently when 
 switching from an int to a uint for the exponent.

 import std.math : pow;
 import std.stdio : writeln;

 void main()
 {

 	float x = 2;
 	int y1 = 1;
 	uint y2 = 1;

 	writeln(pow(x, -y1));  //prints 0.5
 	writeln(pow(x, -y2));  //prints inf

 }
-y1 is -1. But -y2 is uint.max, i.e. a pretty large positive number. The 'u' in "uint" stands for "unsigned". That is, it doesn't know negative numbers. Dont' use uint when you need negative numbers.
Aug 24 2016
parent jmh530 <john.michael.hall gmail.com> writes:
On Wednesday, 24 August 2016 at 19:41:35 UTC, ag0aep6g wrote:
 -y1 is -1. But -y2 is uint.max, i.e. a pretty large positive 
 number.

 The 'u' in "uint" stands for "unsigned". That is, it doesn't 
 know negative numbers. Dont' use uint when you need negative 
 numbers.
Ahh, doh.
Aug 24 2016