Sponsored Content
Top Forums Programming Very strange output with casting Post 303029297 by arunkumar_mca on Thursday 24th of January 2019 01:13:05 PM
Old 01-24-2019
Very strange output with casting

Hi All,

I am having a strange issue. Below is the code snippet. If I print
Code:
fraction * (double)::pow((double)10,scalingFactor)

which is a double I am getting 154 when I type cast that to
Code:
int

as
Code:
(int)( ((fraction) * ((double)::pow((double)10,scalingFactor))))

it is becoming 153. Not sure why casting get me different output. Also for another strange thing is if store the
Code:
fraction * (double)::pow((double)10,scalingFactor)

into a double and then type cast it returning me 154.

Code:
////////////////////////////////////////////////////////////////////////////////
std::string floatToString(double fvalue, int valueLength, int scalingFactor)
{
double i = 0;
double fraction = modf(fvalue, &i);
int intpart = (int)i;
double returnValue = fraction * (double)::pow((double)10,scalingFactor);

std::stringstream ss;
ss	<< std::setfill('0')
<< std::setw(valueLength-scalingFactor)
<< intpart;
ss	<< std::setfill('0')
<< std::setw(scalingFactor)
 << (int)( ((fraction) * ((double)::pow((double)10,scalingFactor))));


std::cout << " VALUE = " << fvalue << " | scalingFactor = " << scalingFactor 
<< " | fraction= " << fraction << " | ss.str() = " << ss.str() 
<< " | ::pow((double)10.0,scalingFactor) = "<< ::pow((double)10.0, scalingFactor) 
<<" | fraction * (double)::pow((double)10.0,scalingFactor) = "<< fraction * (double)::pow((double)10.0, scalingFactor) 
<<" | (int)(fraction * (double)::pow((double)10.0,scalingFactor)) = "<< (int)(fraction * (double)::pow((double)10.0, scalingFactor)) 
<< " | returnValue = "<< (int)returnValue 
<< " | TESTOUTPUT =" << (int)( ((fraction) * ((double)::pow((double)10,scalingFactor))))
<< std::endl;

return ss.str();
}

OUTPUT:

VALUE = 0.154 |
scalingFactor = 3 | 
fraction= 0.154 | 
ss.str() = 000153 | 
::pow((double)10.0,scalingFactor) = 1000 | 
fraction * (double)::pow((double)10.0,scalingFactor) = 154 |
(int)(fraction * (double)::pow((double)10.0,scalingFactor)) = 153 |
returnValue = 154 | TESTOUTPUT=153

 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Strange output from grep

Hi, I am getting different output for grep depending which directory I am in. The following is a transcript of my session, I am using egrep but have also used grep -E. The directory names have been changed for security: $pwd /dir1/dir2/dir3/dir4 $echo 000000 |egrep -v $echo $? 1 $cd ..... (10 Replies)
Discussion started by: Bab00shka
10 Replies

2. Shell Programming and Scripting

strange output

I had a similar script in solaris and it had no problem. I wrote this one in freeBSD and it gave me strange output. Can anyone please tell me why? thanks a lot #!/bin/sh #This is a shell script that checks file system capacity mounted on /home directory #If file system is over 90% capacity,... (1 Reply)
Discussion started by: k2k
1 Replies

3. Solaris

Getting strange output of who -r command

Hi At OK> prompt, I have run the boot -s command After system is coming on to multiuser state, when I run the " who -r" command, I get the following message # who -r run-level Oct 17 03:48 last= Means I dont see "S" after run-level keyword. Could any one... (2 Replies)
Discussion started by: amity
2 Replies

4. Solaris

Strange sar output

I was reviewing yesterday's sar file and came across this strange output! What in the world? Any reason why there's output like that? SunOS unixbox 5.10 Generic_144488-07 sun4v sparc SUNW,T5240 Solaris 00:00:58 device %busy avque r+w/s blks/s avwait avserv 11:20:01 ... (4 Replies)
Discussion started by: dangral
4 Replies

5. Solaris

Strange df output on solaris 9

Hi all, After deleting some large log files on solaris 9 machine I can see strange df output shows below /dev/vx/dsk/rootvol 45G 16384E 50G 39879076698694% / I thought it will back to normal once I restart it but did not. I have seen in sunsolve article 6362734 that "Solaris 8... (0 Replies)
Discussion started by: rajashekar333
0 Replies

6. Shell Programming and Scripting

Tcl:Very strange output!!

Hi, I using tcl script to perform certain conditions. Part of the results should have average . I couldn't figure out what 's the cause as the result of the average is Zero. Example of the case???? #!/usr/bin/tclsh set counter 500 set total 1000 puts "Total num: $total \n" puts ... (3 Replies)
Discussion started by: ENG_MOHD
3 Replies

7. UNIX for Advanced & Expert Users

strange output with du

Can someone please explain why I get two outputs with the du command? The first one gave me one. I also didn't ask for the second directory so why did it give that directory? $ du -h "/media/Part 1/Desktop/playlist" 775M /media/Part 1/Desktop/playlist $ du -h "/media/Part... (1 Reply)
Discussion started by: cokedude
1 Replies

8. UNIX for Advanced & Expert Users

Strange /etc/passwd output

Can someone please explain this to me? auser:x:500:500:Anne User:/home/auser:/bin/sh buser:x:501:501:Bob User:/home/buser:/bin/bash I'm used to it looking like this. What is the difference between the first name and second name? In the first case I had to use the first name to change my... (3 Replies)
Discussion started by: cokedude
3 Replies

9. Shell Programming and Scripting

Strange output from find

How can I prevent find from outputting the directory name /home/xxxxxxxx/Backup/.system (which isn't even "other writable"? I am trying to search for files that are "world writable" on a shared web host using the find statement, and I want to prevent find from creating an error (because the of... (4 Replies)
Discussion started by: nixie
4 Replies

10. Shell Programming and Scripting

Echo's strange output

Hi, Kindly help me to understand the behavior or logic of the below shell command $ echo $!# echo $echo $ $ $ echo !$# echo $# 0 I am using GNU bash, version 3.2.25(1)-release (2 Replies)
Discussion started by: royalibrahim
2 Replies
EXP(3)							   BSD Library Functions Manual 						    EXP(3)

NAME
exp, expf, expl, exp2, exp2f, exp2l, expm1, expm1f, expm1l, pow, powf -- exponential and power functions LIBRARY
Math Library (libm, -lm) SYNOPSIS
#include <math.h> double exp(double x); float expf(float x); long double expl(long double x); double exp2(double x); float exp2f(float x); long double exp2l(long double x); double expm1(double x); float expm1f(float x); long double expm1l(long double x); double pow(double x, double y); float powf(float x, float y); DESCRIPTION
The exp(), expf(), and expl() functions compute the base e exponential value of the given argument x. The exp2(), exp2f(), and exp2l() functions compute the base 2 exponential of the given argument x. The expm1(), expm1f(), and the expm1l() functions compute the value exp(x)-1 accurately even for tiny argument x. The pow() and the powf() functions compute the value of x to the exponent y. ERROR (due to Roundoff etc.) The values of exp(0), expm1(0), exp2(integer), and pow(integer, integer) are exact provided that they are representable. Otherwise the error in these functions is generally below one ulp. RETURN VALUES
These functions will return the appropriate computation unless an error occurs or an argument is out of range. The functions pow(x, y) and powf(x, y) raise an invalid exception and return an NaN if x < 0 and y is not an integer. NOTES
The function pow(x, 0) returns x**0 = 1 for all x including x = 0, infinity, and NaN . Previous implementations of pow may have defined x**0 to be undefined in some or all of these cases. Here are reasons for returning x**0 = 1 always: 1. Any program that already tests whether x is zero (or infinite or NaN) before computing x**0 cannot care whether 0**0 = 1 or not. Any program that depends upon 0**0 to be invalid is dubious anyway since that expression's meaning and, if invalid, its consequences vary from one computer system to another. 2. Some Algebra texts (e.g. Sigler's) define x**0 = 1 for all x, including x = 0. This is compatible with the convention that accepts a[0] as the value of polynomial p(x) = a[0]*x**0 + a[1]*x**1 + a[2]*x**2 +...+ a[n]*x**n at x = 0 rather than reject a[0]*0**0 as invalid. 3. Analysts will accept 0**0 = 1 despite that x**y can approach anything or nothing as x and y approach 0 independently. The reason for setting 0**0 = 1 anyway is this: If x(z) and y(z) are any functions analytic (expandable in power series) in z around z = 0, and if there x(0) = y(0) = 0, then x(z)**y(z) -> 1 as z -> 0. 4. If 0**0 = 1, then infinity**0 = 1/0**0 = 1 too; and then NaN**0 = 1 too because x**0 = 1 for all finite and infinite x, i.e., inde- pendently of x. SEE ALSO
fenv(3), ldexp(3), log(3), math(3) STANDARDS
These functions conform to ISO/IEC 9899:1999 (``ISO C99''). BSD
June 3, 2013 BSD
All times are GMT -4. The time now is 10:07 PM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy