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
POW(3)							   BSD Library Functions Manual 						    POW(3)

NAME
pow -- power function SYNOPSIS
#include <math.h> double pow(double x, double y); long double powl(long double x, long double y); float powf(float x, float y); DESCRIPTION
The pow() functions compute x raised to the power y. SPECIAL VALUES
pow(+-0, y) returns +-infinity and raises the "divide-by-zero" floating-point exception for y an odd integer < 0. pow(+-0, y) returns +infinity and raises the "divide-by-zero" floating-point exception for y < 0 and not an odd integer. pow(+-0, y) returns +-0 for y an odd integer > 0. pow(+-0, y) returns +0 for y > 0 and not an odd integer. pow(-1, +-infinity) returns 1. pow(1, y) returns 1 for any y, even a NaN. pow(x, +-0) returns 1 for any x, even a NaN. pow(x, y) returns a NaN and raises the "invalid" floating-point exception for finite x < 0 and finite non-integer y. pow(x, -infinity) returns +infinity for |x| < 1. pow(x, -infinity) returns +0 for |x| > 1. pow(x, +infinity) returns +0 for |x| < 1. pow(x, +infinity) returns +infinity for |x| > 1. pow(-infinity, y) returns -0 for y an odd integer < 0. pow(-infinity, y) returns +0 for y < 0 and not an odd integer. pow(-infinity, y) returns -infinity for y an odd integer > 0. pow(-infinity, y) returns +infinity for y > 0 and not an odd integer. pow(+infinity, y) returns +0 for y < 0. pow(+infinity, y) returns +infinity for y > 0. A domain error occurs if x is finite and negative and y is finite and not an integer. A domain error can occur if x is 0 and y less than or equal to 0. Range errors may occur. VECTOR OPERATIONS
If you need to apply the pow() functions to SIMD vectors or arrays, using the following functions provided by the Accelerate.framework may give significantly better performance: #include <Accelerate/Accelerate.h> vFloat vpowf(vFloat x, vFloat y); vFloat vpowf(vFloat x, vSInt32 y); void vvpowf(float *z, const float *y, const float *x, const int *n); void vvpow(double *z, const double *y, const double *x, const int *n); void vvpowsf(float *z, const float *y, const float *x, const int *n); void vvpows(double *z, const double *y, const double *x, const int *n); SEE ALSO
exp(3) math(3) STANDARDS
The pow() function conforms to ISO/IEC 9899:2011. 4th Berkeley Distribution December 11, 2006 4th Berkeley Distribution
All times are GMT -4. The time now is 09:09 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy