Find Double/Float value is Odd or Even in C# [closed] - c#

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 5 years ago.
Improve this question
How to find if double value is even or odd without converting them to int in C#? E.g.
123.0d - odd
456.0d - even
3.1415926d - floating point (neither odd nor even)

Try modulo % operator:
double x = 123;
string result = x % 2 == 0
? "even" : x % 2 == 1 || x % 2 == -1
? "odd"
: "floating point"; // e.g. 123.456789
Edit: When does it work? Floating point value (single, double) when it doesn't contain exponential part represents the (integer) value exactly.
https://en.wikipedia.org/wiki/Single-precision_floating-point_format
https://en.wikipedia.org/wiki/Double-precision_floating-point_format
So we have that the solution will work whenever x in these ranges
[-2**24..2**24] == [-16777216..16777216] (float)
[-2**52..2**52] == [-4503599627370496..4503599627370496] (double)
Please, notice, that since .Net assumes that negative % positive == nonpostive, e.g. -3 % 2 == -1 we have to check x % 2 == -1 as well as x % 2 == 1

well i think you answered your question by your own but here is a short code i wrote:
static void Main(string[] args)
{
double number=10.0;
if(number%2==0)
{
Console.WriteLine("Your number is even!");
}
else
{
Console.WriteLine("Your number is odd!");
}
Console.ReadLine();
}
this way you see really good if it works or not

public static bool IsEven(double x)
{
return x % 2 == 0;
}
Please note that it takes more code to make a helper method that does this than it does to actually do it, so if you ever put this in a production environment expect your QA team to send you nasty e-mails.

public bool isEven(double value)
{
decimal decVal = System.Convert.ToDecimal(value);
if (decVal % 2.0 == 0)
{
return true;
}
else
{
return false;
}
}
EDIT: if you convert to a decimal first it should work.

Related

C# Remove all preceding zeros from a double (no strings) [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 6 months ago.
This post was edited and submitted for review 6 months ago and failed to reopen the post:
Original close reason(s) were not resolved
Improve this question
I need a method to return the firsts non zero numbers from a double in the following way: Any number >= 1 or == 0 will return the same; All the rest will return as per the following examples:
(Please note that I am using double because the potential imprecision is irrelevant in the use case whereas saving memory is relevant).
double NumberA = 123.2; // Returns 123.2
double NumberB = 1.2; // Returns 1.2
double NumberC = 0.000034; // Returns 3.4
double NumberD = 0.3; // Returns 3.0
double NumberE = -0.00000087; // Returns -8.7
One option would be to iteratively multiply by 10 until you get a number greater than 1:
public double RemoveLeadingZeros(double num)
{
if (num == 0) return 0;
while(Math.Abs(num) < 1) { num *= 10};
return num;
}
a more direct, but less intuitive, way using logarithms:
public double RemoveLeadingZeros(double num)
{
if (num == 0) return 0;
if (Math.Abs(num) < 1) {
double pow = Math.Floor(Math.Log10(num));
double scale = Math.Pow(10, -pow);
num = num * scale;
}
return num;
}
it's the same idea, but multiplying by a power of 10 rather then multiplying several times.
Note that double arithmetic is not always precise; you may end up with something like 3.40000000001 or 3.3999999999. If you want consistent decimal representation then you can use decimal instead, or string manipulation.
I would start with converting to a string. Something like this:
string doubleString = NumberC.ToString();
I don't know exactly what this will output, you will have to check. But if for example it is "0.000034" you can easily manipulate the string to meet your needs.

Algorithm: how many indivisible units are needed to overshadow a random number? [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 8 years ago.
Improve this question
How can I find how many indivisible units of 1,000 are needed to overshadow a random number?
For example, for random number 5,123 I'm going to need 6 x 1,000 to overshadow it, so: MyAlgorithm(5123, 1000) = 6
Edit1: I am sorry if despite my endeavor to articulate my problem into a meaningful description my dyslexia took over, I hope this edit makes it a bit more comprehensible.
Well, if I understand your question, it sounds like you could simply convert the parameters to decimals, divide, then use Math.Ceiling:
int output = (int)Math.Ceiling((decimal)5123 / (decimal)1000); // 6
Alternatively, you could avoid the conversions and rely purely on integer division and the % operator (modulus), like this:
int output = (5123 / 1000) + (5123 % 1000 == 0 ? 0 : 1);
If you want this in a method simply wrap it up like this:
static int MyAlgorithm(int a, int b)
{
return (a / b) + (a % b == 0 ? 0 : 1);
}
if I've understood you correctly, this is really just a one-liner:
public static int MyAlgorithm(int input, int units)
{
return input%units == 0 ? input/units : input/units + 1;
}
the only case when it isn't simply the result of input/units + 1 is the case when there is no remainder
public int MyAlgorithm(int x, int y)
{
int result = x / y;
return (result < 0) ? (result - 1): (result + 1);
}

Auto adjust decimal depending on length [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 9 years ago.
Improve this question
I would like to create a function that can set the decimal length based on the length of the whole number.
Lets say I have these numbers:
100.12345
10.123456
1.1234567
The total length of the whole number should be 5, and the decimal separator should be adjusted so it fits 5 numbers. This is my desired output:
100.12
10.123
1.1234
Is there any easy way to accomplish this in C#?
UPDATE: To be more clear in my question on how the conversion should be.
(Current number > Formatted number)
100000.222 > 100000
10.222222 > 10.222
1.22 > 1.22
1 > 1
0.2222 > 0.2222
Not sure that this is a good answer, but it seems to work
decimal FormatToMaxLength(decimal v, int maxLength)
{
string s = string.Format("{0}", v);
if(s.Length > maxLength + 1)
s = s.Substring(0, maxLength + 1);
decimal cv;
decimal.TryParse(s, out cv);
return cv;
}
a revised version that, if the decimal has more numbers in the whole part than requested length preserve the whole part
decimal FormatToMaxLength(decimal v, int maxLength)
{
string s = string.Format("{0}", v);
string[] parts = s.Split(CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0]);
if(parts[0].Length >= maxLength)
s = parts[0];
else
s = s.Substring(0, Math.Min(s.Length, maxLength + 1));
decimal cv;
decimal.TryParse(s, out cv);
return cv;
}
Examples tested
decimal d = FormatToMaxLength(121.12233m, 5); // returns 121.12
decimal z = FormatToMaxLength(123456789.12345m, 5); // returns 123456789
Still I am not convinced that converting to a string and then take a subset is a good idea.
Let's see if someone has a better approach or see an obvious solution that I am missing.
static string FormatToMaxLength(decimal d, int maxLength)
{
string s = d.ToString();
s = s.Remove(s.Length - (s.Length - maxLength + 1), s.Length - maxLength - 1);
return s;
}
this seems to work as well

c# newbie lost in recursive function [closed]

Closed. This question needs details or clarity. It is not currently accepting answers.
Want to improve this question? Add details and clarify the problem by editing this post.
Closed 9 years ago.
Improve this question
Hi I have problem with recursion in c#
Here is the code:
static int g(int a)
{
if (a > 0)
return -2 * g(a - 2) + 2;
else
return -2;
}
What is the result for:
Console.WriteLine(g(5));
Could some one explain me what is the value of int g when is not declared like int a ?
Could some one explain me what is the value of int g when is not
declared like int a ?
I don't understand what does the question mean, althought I'm going to explain you what does the function return if you pass 5.
Firstly lets declare another integer to make it easier:
static int g(int a)
{
if (a > 0){
int result = g(a - 2);
return -2 * result + 2;
}
else
return -2;
}
Then:
Console.WriteLine(g(5)) //-2*(-10)+2 = 22
if 5 > 0
result = g(3) //-2*(6)+2 = -10
return -2 * result + 2
if 3 > 0
result = g(1) //result = -2*(-2)+2 = 6
return -2 * result + 2
if 1 > 0
result = g(-1) //result = -2
return -2 * result + 2
if -1 < 0
return -2
You appear to lack an understanding of recursion. Let's simplify recursion to a "classic" base case which is much simpler than your example. Let's do a sum of from 1 to an input number:
public int SumAll(int number)
{
// Base case
if (number == 1)
{
return 1;
}
// Recursive call
return number + SumAll(number - 1);
}
Recursion always involves both calling a method within itself and a "base case" or termination step that stops the loop. In the above example, the "base case" is the number being equal to 1 to stop the loop.
The above example will evaluate as follows
return 5 + SumAll(4);
And SumAll(4) will evaluate as:
return 4 + SumAll(3);
Thus far, our final result will be:
5 + 4 + Sum(3);
And so forth... Study the method to understand why.

How does one implement IsPrime() function [duplicate]

This question already has answers here:
Closed 12 years ago.
Possible Duplicates:
Program to find prime numbers in C#
prime numbers c#
Most elegant way to generate prime numbers
Hi Guys.
How does one check if a number is prime or not?
That's one I use to write any time i need to do this check:
inline bool isPrime(const int a)
{
if(a == 1) return false;
if(a == 2 || a == 3) return true;
if(!(a & 1)) return false;
if(!((a + 1)%6 || (a-1)%6)) return false;
int q = sqrt((long double)a) + 1;
for(int v = 3; v < q; v += 2)
if(a % v == 0)
return false;
return true;
}
It works really well because of some useful prunings.
Don't know if there's a standard function for it, but you could always built a method using the Sieve of Eratosthenes (link: http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes). Pretty easy to implement.
There are a couple of c# versions here: LTD Puzzle 4: Finding Prime Numbers
There are also f#, c, JavaScript. PHP etc etc versions
If it is divisible by 1 or itself, it is prime. You can shorten the number of tests by realizing that all primes except 2 are odd, or it would be divisible by 2. Also, all prime numbers above 5 can be represented as 6n+1 or 6n-1, but not all numbers generated this way are primes. Additionally, the largest possible divisor of the number will be its square root. These facts are enough to make the test much faster than if you just tested all numbers till the number you want to check.

Categories

Resources