Calculate Power of Double with Double exponent in C# [duplicate] - c#

This question already has answers here:
How can I divide two integers to get a double?
(9 answers)
Closed 3 years ago.
I need to calculate x^y where both x and y are Doubles.
I tried using Math.Pow:
Double result = Math.Pow(24.69, 2/3);
The value of result is 1 where it should be 8.4790 ...
Any idea why?

For the exponent you are passing in 2 ints which is do integer division. So it is doing:
Math.Pow(24.69, 0)
To fix this use doubles like this:
Double result = Math.Pow(24.69, 2.0/3.0);

Related

C#: How to round a float to a defined amount of relevant digits? [duplicate]

This question already has answers here:
How do you round a number to two decimal places in C#?
(15 answers)
How can I round a Decimal value upto a precision so that the total number of digits doesnot cross 15?
(2 answers)
Closed 8 months ago.
How can I limit a float to a defined amount of digits? Let's say I want a precision of 4, then it should be:
14.49193 -> 14.49
1.449193 -> 1.449
0.449193 -> 0.4492
0.000449193 -> 0.0004492
I resolved it with this method, there may be a smoother solution.
public static float LimitDigits(float val,int digits) {
if (val == 0) return 0;
return (float)((val<1.0)?Math.Round(val,digits+(int)Math.Floor(-(Math.Log10(val)))):Math.Round(val, Math.Max(0,digits-(int)Math.Floor((Math.Log10(val)+1)))));
}

is this normal in .NET 6 [duplicate]

This question already has answers here:
Why does integer division in C# return an integer and not a float?
(8 answers)
How can I divide two integers to get a double?
(9 answers)
Closed last year.
This post was edited and submitted for review last year and failed to reopen the post:
Original close reason(s) were not resolved
I feel it's a bug, is it?
decimal s = 30 / 9;
double w = 20 / 9;
Console.WriteLine(s);
Console.WriteLine(w);
and the result is
Is this normal, yes. Is this a bug, no.
You're doing integer math on 30 / 9 which is 3 and then assigning to a decimal which then does the conversion. Same with the second line.
Try this instead:
decimal s = 30m / 9m;
double w = 20.0 / 9.0;
Console.WriteLine(s);
Console.WriteLine(w);
That gives:
3.3333333333333333333333333333
2.2222222222222223
You need to declare your constants in your expression with the correct type. Suffix an m for decimal. And either provide a decimal place or suffix with a d for double.

Converting decimal to float without rounding [duplicate]

This question already has answers here:
Why are floating point numbers inaccurate?
(5 answers)
Closed 2 years ago.
Decimal Value is 12568.521
When converting into float
(float)Value
Value is coming as 12568.5215. I need exact value as 12568.521. Please anyone guide me.
Try using Round in Math
decimal value = 12568.5215;
return Math.Round(value,3);
You may convert the decimal variable into a string:
decimal d = new decimal(12568.521);
float f = Single.Parse(d.ToString());

Multiplying large values results to negative value [duplicate]

This question already has answers here:
Multiplying two positive Int32 returns incorrect, negative answer?
(3 answers)
Closed 3 years ago.
double result = 0.0;
result = 7777 * 7777 * 7777 *7777 ;
Instead of getting the result 3658039542829441, I am getting -1283042943. Can someone suggest how to avoid this? I understand the calculation is still under double type's range.
Each 7777 is an integer literal. So it is performing integer multiplication. You will need to make these double literals using the d suffix. Then it will perform double multiplication.
double result = 0.0;
result = 7777d * 7777d * 7777d * 7777d ;

C# double not working as expected [duplicate]

This question already has answers here:
C# is rounding down divisions by itself
(10 answers)
Closed 7 years ago.
I understand that a double is a decimal.
In the following program the output is 1 even though I thought it would be 1.05 repeating.
static void Main (string[] args)
{
double d = 19 / 18;
Console.WriteLine(d);
Console.ReadKey();
}
Am I misunderstanding double?
You are misunderstanding integer math.
Integer-19 / Integer-18 results in an Integer with value 1.
(that you assign the value to a double is not relevant. The calculation results in an Integer).
To fix it, use:
double d = 19.0 / 18.0;

Categories

Resources