code_junkie

How do you calculate div and mod of floating point numbers

Nov 13th, 2011
188
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. sub foo {
  2. my $n1 = shift;
  3. my $n2 = shift;
  4. print "perl's mod=" . $n1 % $n2, "n";
  5. my $res = $n1 / $n2;
  6. my $t = int($res);
  7. print "my div=$t", "n";
  8. $res = $res - $t;
  9. $res = $res * $n2;
  10. print "my mod=" . $res . "nn";
  11. }
  12.  
  13. foo( 3044.952963, 7.1 );
  14. foo( 3044.952963, -7.1 );
  15. foo( -3044.952963, 7.1 );
  16. foo( -3044.952963, -7.1 );
  17.  
  18. perl's mod=6
  19. my div=428
  20. my mod=6.15296300000033
  21.  
  22. perl's mod=-1
  23. my div=-428
  24. my mod=6.15296300000033
  25.  
  26. perl's mod=1
  27. my div=-428
  28. my mod=-6.15296300000033
  29.  
  30. perl's mod=-6
  31. my div=428
  32. my mod=-6.15296300000033
  33.  
  34. use POSIX "fmod";
  35.  
  36. sub foo {
  37. my $n1 = shift;
  38. my $n2 = shift;
  39. print "perl's fmod=" . fmod($n1,$n2), "n";
  40. my $res = $n1 / $n2;
  41. my $t = int($res);
  42. print "my div=$t", "n";
  43. $res = $res - $t;
  44. $res = $res * $n2;
  45. print "my mod=" . $res . "nn";
  46. }
  47.  
  48. foo( 3044.952963, 7.1 );
  49. foo( 3044.952963, -7.1 );
  50. foo( -3044.952963, 7.1 );
  51. foo( -3044.952963, -7.1 );
  52.  
  53. perl's fmod=6.15296300000033
  54. my div=428
  55. my mod=6.15296300000033
  56.  
  57. perl's fmod=6.15296300000033
  58. my div=-428
  59. my mod=6.15296300000033
  60.  
  61. perl's fmod=-6.15296300000033
  62. my div=-428
  63. my mod=-6.15296300000033
  64.  
  65. perl's fmod=-6.15296300000033
  66. my div=428
  67. my mod=-6.15296300000033
Add Comment
Please, Sign In to add comment