cms.fundamental.sum_error のソースコード

import sys
import csv
import numpy as np

outfile = 'sum_error.csv'
h = 0.01
n = 101
iprintstep = 10


[ドキュメント] def getintarg(argv, iarg, defval=None): try: return int(argv[iarg]) except Exception: return defval
[ドキュメント] def getfloatarg(argv, iarg, defval=None): try: return float(argv[iarg]) except Exception: return defval
[ドキュメント] def main(): global h, n, iprintstep argv = sys.argv narg = len(argv) if narg <= 2: print("") print("Usage: python sum_error.py h n iPrintStep") print(" Summing up h for n times with different precision floating point types.") print(" Output every iPrintStep steps") print("") return h = getfloatarg(argv, 1, h) n = getintarg(argv, 2, n) iprintstep = getintarg(argv, 3, iprintstep) h16 = np.array([h], dtype=np.float16) sum16 = np.array([0.0], dtype=np.float16) h32 = np.array([h], dtype=np.float32) sum32 = np.array([0.0], dtype=np.float32) h64 = np.array([h], dtype=np.float64) sum64 = np.array([0.0], dtype=np.float64) ex = np.array([0.0], dtype=np.float64) err16 = np.array([0.0], dtype=np.float64) err32 = np.array([0.0], dtype=np.float64) err64 = np.array([0.0], dtype=np.float64) print("") print( "Summing up {} for {} times with " "different precision floating point types".format(h, n) ) print("Write to [{}]".format(outfile)) with open(outfile, 'w', newline='') as f: fout = csv.writer(f, lineterminator='\n') fout.writerow([ 'exact', 'float16', 'float32', 'float64', 'error(float16)', 'error(float32)', 'error(float64)' ]) print("") print(f"{'exact':^5}:\t{'sum16 (error)':^28}\t{'sum32 (error)':^28}\t{'sum64 (error)':^28}") for i in range(n): ex[0] = (i + 1) * h sum16[0] += h16[0] err16[0] = ex[0] - sum16[0] sum32[0] += h32[0] err32[0] = ex[0] - sum32[0] sum64[0] += h64[0] err64[0] = ex[0] - sum64[0] fout.writerow([ ex[0], sum16[0], sum32[0], sum64[0], err16[0], err32[0], err64[0] ]) if i % iprintstep == 0: print(f"{ex[0]:<0.4f}: ", end='') print(f"{sum16[0]:<0.18f} ({err16[0]:<+9.2e}) ", end='') print(f"{sum32[0]:<0.18f} ({err32[0]:<+9.2e}) ", end='') print(f"{sum64[0]:<0.18f} ({err64[0]:<+9.2e}) ", end='') print("") print("")
if __name__ == "__main__": main()