프로그래밍/C# 36

C# 언어에서 큰 부동소수점수(native double) 의 정확도

정수부의 자리수가 조금 큰 부동소수점수(64비트 double 포맷의 수)를 십진수 표현으로 출력해 보았습니다. 십진수로 표현하면 유효자리수 개수가 약 14~15개 정도인데, Java 언어로는 유효수자 개수를 17개로 자르고 그 뒤를 모두 0으로 출력하였지만, C# 언어로는 유효수자 아래 부분을 15개로 자르고 그 뒤를 모두 0으로 출력합니다. Pyhon 은 C/C++ 의 경우 처럼 유효수자 아래 부분을 0으로 채우지 않습니다. 물론 Java, C#, Python, C, C++ 어느 프로그램 언어든 십진수로 표현할 때 자르는 방법이나 유효수자 아래 부분을 채우는 방법은 다르지만, 덧셈, 뺄셈, 곱셈, 나누셈, 기타 등등에서 유효수자 아래부분의 처리 결과는 대동소이합니다. // Filename: Test_O..

프로그래밍/C# 2023.03.19

분수 계산 라이브러리 FractionLib 를 소개합니다.

먼저 파이썬 인터프리터를 실행하여 0.3 - 0.2 - 0.1 의 계산 결과를 알아 보았습니다. >>> 0.3 - 0.2 - 0.1 -2.7755575615628914e-17 계산 결과가 왜 0이 아닌 엉뚱한 값 -2.7755575615628914e-17 이 될까요? IEEE754 에 대해서는 관련되는 두 문서 [1] Double-precision floating-point format [2] Floating Point Arithmetic: Issues and Limitations 를 참고하기 바랍니다. NET Framework 4.6.x 이상에서 사용가능한 NET용 분수 계산 라이브러리를 소개합니다. (소스 수정 없이 NET Core 5.0 이상에서도 사용 가능합니다.) (Mac OS 에서도 Fract..

프로그래밍/C# 2022.07.25

0.3 - 0.1 == 0.2 ?

C# 언어로 부동소수점수 계산할 때 실수할 수 있는 경우이다. 반복문의 탈출 조건에 저런 것을 이용하다 자칫하면 무한 반복의 늪에 빠질 수 있다. 금액 계산의 경우에 정확한 계산이 요구되기 때문에 float 타입이니 double 타입 보다는 decimal 타입을 사용하는것이 더 바람직할 것이다. 정확한 소수점수 계산을 위해 decimal 타입을 사용한 다음 C# 소스의 실행 결과를 보자. using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace CalcDecimalConsoleApp { class Program { static void M..

프로그래밍/C# 2020.12.14

Visual Studio 2019 에서 유닛 테스트 작성하는 예

아래의 글은 MS의 유닛 테스트 적성하기 문서에 오류가 있어 바로 잡기 위한 글입니다. 유닛 테스트하는 도구로는 MSTest, NUnit, xUnit 등 몇 가지가 있는데 이 중에 MSTest를 이용하여 유닛 테스트하는 예를 작성해 보고자 한다. 컨솔 창에 Hello World! 라는 문구가 정상적으로 출력되는지 알아보는 유닛 테스트이다. Visual Studio 2019 의 메뉴에서 "파일(F)" -> "새로 만들기" -> "프로젝트(P)"를 선택하고, "새 프로젝트 만들기" 창에서아래와 같이 선택하고 "다음(N)" 버큰을 클릭한다. 다음에 프로젝트 이름과 폴토를 선택하는 창에서 아래와 같이 "프로젝트 이름(N)" 입력 난에 HelloWorldTests 라고 입력하고, 그 아래 항목 "위치(L)" 난에..

프로그래밍/C# 2020.04.21

C# 의 세제곱근 구하는 함수 Cbrt()

C 언어나 C++ 언어에는 세제곱근을 구하는 함수 cbrt() 가 기본적으로 제공되어 있다. 소스에서 단지 #include 또는 #include 를 추가하기만 된다. 그러나 C# 언어에는 이런 함수가 기본적으로 제공되지 있지 않다. (Framework 의 경우) 그런데 Core 3.0 이상의 경우에는 C# 언어에서도 제곱근 함수 Sqrt() 와 세제곱근 함수 Cbrt() 를 기본적으로 사용할 수 있다. using System.Math; 구문이 없더라도 쓸 수 있다. Visual Studion 2019에서 "새 프로젝트 만들기" -> "콘솔 앱(.NET Core)" 하고 프로젝트 이름을 적당히 써 주고 C# 소스 Progam.cs 를 편집하는 창에서 Main() 함수 부분을 다음과 같이 수정하고 빌드하여 ..

프로그래밍/C# 2020.03.25

원시 피타고라스 삼조를 생성하는 C# 소스

원시 피타고라스 삼조(primitive pythagorea triplet)를 생성하는 명령줄 어플(Command Line Application) C# 소스 C# 소스: // Filename: GeneratePrimitivePythagoreanTriplets.cs // // Compile: csc GeneratePrimitivePythagoreanTriplets.cs // // Execute: GeneratePrimitivePythagoreanTriplets 7 using System; using System.Collections.Generic; namespace GeneralCommandLineApp { class Program { public static Int64 GetGCD(Int64 xa, Int..

프로그래밍/C# 2020.03.01

이진 파일을 읽어서 16진수로 보여주는 HexView 소스 with C#

C# 언어 소스: // Filename: TestHexView03.cs // // Compile: csc TestHexView03.cs // Execute: TestHexView03 [filename] // // Date: 2013. 7. 31. using System; using System.IO; public class TestHexView03 { public static void PrintUsage() { Console.WriteLine("TestHexView03 [filename]"); } public static String toHex(byte b) { String s = ""; int x1, x2; x1 = (b & 0xF0) >> 4; x2 = b & 0x0F; if (x1 < 10) s +..

프로그래밍/C# 2013.08.05

C# 언어로 작성하여 실행해 본 OpenGL 예제: Redbook 의 Teapots

컴파일에 필요한 dll 파일들은 CsGL 을 다운로드하면 들어 있다. 이전에 올린 C 언어용 소스와 Python 언어용 소스와 비교하면 이해할 수 있을 것이다. #region BSD License /* BSD License Copyright (c) 2002, Randy Ridge, The CsGL Development Team http://csgl.sourceforge.net/ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of..

프로그래밍/C# 2013.05.17

C# 언어로 작성하여 실행해 본 OpenGL 예제: Redbook 의 Cube

컴파일에 필요한 dll 파일들은 CsGL 을 다운로드하면 들어 있다. 이전에 올린 C 언어용 소스와 Python 언어용 소스와 비교하면 이해할 수 있을 것이다. #region BSD License /* BSD License Copyright (c) 2002, Randy Ridge, The CsGL Development Team http://csgl.sourceforge.net/ All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of..

프로그래밍/C# 2013.05.10